문제

지 못한 프로그래밍 게임에 대해 10 년 동안(나의 마지막 경험 DJGPP+Allegro)지만,나는 체크아웃 XNA 주말 어떻게 형성되었다.

나는 상당히 감동,그러나 내가 계속하여 조각 함께 게임 엔진은,나는(아마도)기본적인 질문입니다.

얼마나 해야 당신은에 의존 C#의 대표 및 이벤트 드라이브까요?응용 프로그램으로 프로그래머,내가 사용하는 대표단과 이벤트를 많이지가 있는 경우 상당한 오버헤드를 이렇게 함.

내 게임 엔진을 설계했"체이스 캠"의 종류에 연결할 수 있는 객체고 그런 다음 다시 계산의 위치에 상대적인 객체입니다.할 때,이동하는 방법은 두 가지가 있 업데이트 쫓아 캠입니다.

  • 는"UpdateCameras()"방법의 주요 게임에 반복입니다.
  • 사용 이벤트 처리기와가 쫓아 캠 가입니다.OnMoved.

내가 사용하고,후자 할 수 있기 때문에 나 체인을 이벤트를 함께 멋지게 자동화하의 큰 부분 엔진입니다.갑자기,무엇이 큰 것이고 복잡을 얻을 아래로 떨어졌을의 소수 3-5 라인 이벤트 처리기...그 아름다움입니다.

그러나,만약의 이벤트 처리기 발사 매 nanosecond 수 차례의 주요 둔화,나는 그것을 제거하고 루프 접근 방식이다.

아이디어가?

도움이 되었습니까?

해결책

당신이 생각하는 이벤트의 구독자로 목록에서,코드는 모두 당신이 등록하는 것입니다.수하는 데 필요한 지침을 달성하는 것을 가능성이 최소화 될에 CLR 수준입니다.

당신이 당신의 코드는 일반적 또는 동적 후,당신은 필요한지 확인하려면 뭔가가 가입을 호출하기 전에는 이벤트입니다.이벤트/는 대리자의 메커니즘 C#다.NET 은 이해 당신에 매우 작은 비용(의 관점에서 CPU).

만약 당신이 정말로 걱정하는 모든 클럭 주기 당신은 결코 일반적/동적 게임 논리입니다.그것은 무역에 사이에 유지 관리하/구성 가능한 코드와 노골적인 속도입니다.

잘 쓰면,나는 은혜 이벤트/대표 수 있을 때까지 그것을 증명하는 문제입니다.

유일한 방법은 당신이 진정으로 알고 있으면 그것은 문제가 당신을 위해 프로파일링은 귀하의 코드는 당신이해야 할 어쨌든 모든 게임 개발!

다른 팁

그것은 깨닫는 것이 중요하다 이벤트에서는 C#지 않은 대기된 비동기 이벤트(예를 들어,윈도우 메시지 큐).그들은 기본적으로 목록 함수 포인터입니다.그래서 이벤트를 발생 시키지 않는 더 나쁜 성능에 미치는 영향보다 반복을 통해의 목록 함수 포인터와 호출됩니다.

동시에 실현,이 때문에,이벤트가 동기화합니다.하는 경우 이벤트 수신기 은 천천히,당신은 느리게 클래스 올리 이벤트.

주요 여기 질문이 될 것으로 보인다:"무엇 오버헤드 사용과 관련하여 C#대표 및 이벤트?"

이벤트가 작은 중요한 오버헤드를 비교하는 일반적인 함수 호출합니다.

의 사용이 대표를 만들 수 있다는 암시적이며 따라서 숨겨진 쓰레기입니다.쓰레기될 수 있는 주요 원인 성능 문제에 특히 XBox360.

다음 코드를 생성한 2000 년의 주위에 바이트의 쓰레기는 초당(60fps)형태의 EntityVisitor 개체:

    private delegate void SpacialItemVisitor(ISpacialItem item);

    protected override void Update(GameTime gameTime)
    {
        m_quadTree.Visit(ref explosionCircle, ApplyExplosionEffects);
    }

    private void ApplyExplosionEffects(ISpacialItem item)
    {
    }

만큼 당신을 생성하는 쓰레기,대표단은 충분히 빠른 대부분의 목적이다.때문에 숨겨진된 위험을 좋아하고 그들을 피하기 위해 사용하는 대신 인터페이스.

내 여분의 시간에서 실제 작업을 했고,학습 XNA too.

이럴(또는 그렇게 겸손하는 경우 요청 내 동료)이는 오버헤드 이벤트를 처리하는 것에 의해 압도되는 다른 요소에 같은 게임에서 렌더링을 수행합니다.주어진 무거운 이용에 있는 이벤트 정상입니다.Net 프로그래밍을 나는 것은 기본 코드 최적화되어 있습니다.

솔직히 말해서,생각하는 UpdateCameras 방법이 될 수 있는 조 최적화입니다.이벤트 시스템는 아마도 더 사용하는 다른 카메라보다.

XNA 의 사용을 권장합 인터페이스,이벤트 및 대의 드라이브가 기록합니다.을 살펴 GameComponent 관련 클래스는 당신이 설정.

그 대답은"만큼 당신은 편안한 느낌".

을 정교하게 조금는 경우,예를 들어,당신은 당신이 가지고에서 상속 gamecomponent 클래스로 cameracontroller 클래스에 추가하는 게임이다.구성 요소 컬렉션입니다.을 만들 수 있습니다 다음은 카메라 클래스고에 추가 cameracontroller.

이것을 하고 있는 원인이 될 것이 cameracontroller 하라는 정기적으로 선택 할 수 있고 활성화하는 적절한 카메라 또는 여러 개의 카메라는 경우에는 당신이 가고 있는 무슨이다.

여기에는 이 예를 들어(모든 그의 튜토리얼은 우수):ReoCode

옆으로,관심이 있을 수도 있습니다는 것을 알 Shawn Hargreaves, 원래 개발 알레그로, 은 하나의 메인 개발자에 XNA 팀:-)

으로 가기 전에 미치는 영향은 무엇인가는 이벤트의 관점에서의 성능해야 합니다 첫 번째는지 여부를 평가 또는 그렇지가 필요합니다.

고 가정하고 당신은 정말 노력을 계속 추적 cam 업데이트 및 그뿐만 아니라,예를 들어 당신이 찾고있는 무엇이지(그러나 이벤트 트릭을 할 수 있습니다 단지뿐만 아니라),다음과 같은 경우 아바타 가능성이 될 것이 움직이는 대부분의 시간입니다.

방법 중 하나 내가 발견 매우 효과적인 사용하여 위계구조적 변화를 구현하는 경우에는 이를 효율적으로 카메라지 않을 것이 유일한 개체에서 혜택을 같은 시스템 목표를 유지하는 것 카메라에서 좌표 공간의 개체 추적이 있습니다.

는 접근 방식은 가장 중 하나를 적용할 경우 일부에 탄력을 속도와 방법에는 트랙 카메라 개체 위해,그것은,그것은 최고의 사용이 업데이트를 호출,참조,그리고 몇 가지 기본적인 가속도와 저항 물리.

이벤트가 더 유용한 것만 일시 또는 영향을 주는 많은 다른 측면 응용 프로그램의 문자처럼 죽어가는,아마 많은 서로 다른 시스템 것을 알고 있어야의 이러한 이벤트를 죽이고,통계,제어 AI,그리고,이러한 경우에,모든 개체하는 것이 지속적으로 확 이런 일이있는 경우가 훨씬 적은 효과적인 던지기보다는 이벤트는 모든 관심있는 개체를 통지가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top