사용 GameComponent
때와 같이, 프로그램의 시작 (적절한 사용자가 키보드를 눌렀을 때와 같이 기기가 손실 될 때마다 마찬가지로 Ctrl-Alt-Del). 당신이 그렇게 InputManager
가 GameComponent
수, 사용자 입력이 계속 업데이트 할 수 있도록
는
InputManager
위해 당신은,
Update
방법을 할 수 있습니다.
DrawString
은 소리처럼 들리지 않습니다. 두 수업 모두 서비스가 될 수있는 것처럼 들립니다. 생성자 또는 게임 클래스의
Initialize
방법에서 다음과 같이 수행합니다. (
DrawString
하고
Game
개체에 대한 참조를해야합니다에서 게임 서비스를 얻으려면 다른 클래스)
Components.Add(mInputManager = new InputManager(this));
Services.AddService(typeof(InputManager), mInputManager);
Services.AddService(typeof(DrawString), mDrawString = new DrawString(this))
을
(GameComponent
의이 반드시 서비스를 할 필요가 없습니다, 서비스가 반드시 필요 GameComponent
의 할 필요는 없습니다 Update
를 얻으려면 및/또는 Draw
호출 할, 당신은 Components.Add(...)
를 호출해야합니다. 개별적으로 개체를 가져 서비스로 검색 할 수있는 경우번으로 전화해야합니다. 0). 당신은 몇 가지 다른 게임 구성 요소의 InputManager
또는 DrawString
서비스 (또는 당신이 당신의 게임 개체에 대한 참조를 통과 한 모든 클래스)를 사용하고자하는 경우 다음
, 당신은이 작업을 수행 할 수 있습니다
InputManager input = (InputManager)Game.Services.GetService(typeof(InputManager));
개인적으로, 나는 그보다 간결하게 확장 메서드 쓰기 :
using XNAGame = Microsoft.XNA.Framework.Game;
...
public static T GetService<T>(this XNAGame pXNAGame)
{
return (T)pXNAGame.Services.GetService(typeof(T));
}
다음 입력 서비스를받을 수있는 라인은된다 :
InputManager input = Game.GetService<InputManager>();
이 질문에 대한 정답은 "GameComponent'를 사용하지 마십시오"라고 생각합니다. 나만의 수업을 작성할 수 있습니다. 자신 만의 인터페이스를 작성할 수 있습니다. 이를 위해서는 아마도 메서드를 사용할 수 있습니다. 그렇다면 변수를 전달할 수 있습니다. (예를 들어, 메소드에 대한 인수). 어쨌든'GameComponent' [kinda sucks] (http://gamedev.stackexchange.com/a/9209/288). –