첫 번째 '적절한'게임 프로젝트를 시작했으며 XNA의 게임 구성 요소가 어떻게 통신해야하는지 결정하려고 노력했습니다.
이전의 (Java) GUI 프로그래밍 이벤트에서 핸들러와 리스너는 앞으로 나아갈 것 같았습니다. 그래서 이벤트 등록을 허용하는 이벤트 버스와 이벤트를 처리하는 처리기가있는 이벤트 등록 클래스가 있습니다. 예를 들어 (의사 코드) :
class SpriteManager
Update(){
if(player.collidesWith(enemy)
// create new 'PlayerCollisionEvent'
}
class HUDManager
onPlayerCollisionEvent(){
// Update the HUD (reduce lives etc)
}
그러나이 작업을 완전히 수행하는 데 필요한 코드 설정 (C #)은 확실하지 않습니다. 이벤트 (일종의 버스)를 추적하는 것은 무엇이며 어떻게 구성됩니까?
또한 Game Services에 대해 많은 언급이있는 것처럼 보입니다. 주요 Game.cs 클래스에 GameComponent를 등록 한 다음 주 'Game'객체에 대한 참조가있는 코드의 어느 곳에서나 가져올 수 있습니다. SpriteBatch 객체로 이것을 시도했지만 매우 쉬운 것처럼 보입니다. 그러나 이벤트 모델만큼 융통성이없는 것을 볼 수 없습니다.
적이 죽을 때를 예로 들어 보겠습니다. 게임 점수를 업데이트하고 싶습니다. 서비스를 사용하여 Game1에서 생성되고 서비스로 추가 된 StateManager 객체에 대한 참조를 얻은 다음 'score'를 새 값으로 설정할 수 있습니다. 나는 여러 클래스에서 다르게 처리 할 수 있지만 관련 '죽음 감지'섹션에서 1 줄의 코드로 시작되는 'onEnemyDeath'이벤트를 생각할 것입니다. 각 필요한 GameComponent를 개별적으로 캐스팅 한 다음 무엇이든 호출하는 것보다 낫습니다. 방법이 필요합니다.
아니면 이러한 열등한 전략이 다른 것보다 좋은가?
나는 이것이 게임 커뮤니케이션 패러다임만큼 C # 지식이 부족하다는 것을 알고 있지만 실제로이 근본적인 것을 얻고 싶습니다.
최신 정보
서비스를 살펴보면 확신이 덜합니다. 기본적으로 전역 변수를 (내가 이해 한 것) 전달합니다.
업데이트 2
이벤트 처리 및 샘플 코드 테스트에 대한 이 기본 자습서를 살펴본 결과 이벤트는 내가 논의하고있는 논리적 인 선택 인 것 같습니다. 그러나 내가 본 샘플에서 많이 사용하지는 못합니다. 왜 안되어야하는지 분명한 이유가 있습니까?