2012-07-07 7 views
1

1 gamecomponent에서 다른 값으로 변수 값을 전달하는 방법에 대해 혼란스러워합니다. xna 4.0을 사용하고 있습니다.XNA 게임 구성 요소

두 개의 gamecomponents 인 drawstring과 inputmanager를 만들었습니다. 사용자의 키보드 입력을 읽고 위치를 업데이트 할 drawstring으로 전달하려고합니다.

drawstring (drawablegamecomponent)에 구성 요소를 추가 할 수 없습니다. 클래스에서는 할 수 있지만 gamecomponent에서는 할 수 없습니다. 몇 가지 예를 게시 할 수 있습니까? 초보자를위한. 당신이 모든 프레임에서 호출 Update을 가지고, 당신은 전화 모든 프레임 및 LoadContent 호출 Draw을 가지고 싶은 뭔가 DrawableGameComponent를 사용하려면 무언가에 대한

+1

이 질문에 대한 정답은 "GameComponent'를 사용하지 마십시오"라고 생각합니다. 나만의 수업을 작성할 수 있습니다. 자신 만의 인터페이스를 작성할 수 있습니다. 이를 위해서는 아마도 메서드를 사용할 수 있습니다. 그렇다면 변수를 전달할 수 있습니다. (예를 들어, 메소드에 대한 인수). 어쨌든'GameComponent' [kinda sucks] (http://gamedev.stackexchange.com/a/9209/288). –

답변

2

사용 GameComponent 때와 같이, 프로그램의 시작 (적절한 사용자가 키보드를 눌렀을 때와 같이 기기가 손실 될 때마다 마찬가지로 Ctrl-Alt-Del). 당신이 그렇게 InputManagerGameComponent 수, 사용자 입력이 계속 업데이트 할 수 있도록

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>(); 
+0

고마워요 :) 지금이 공부하고 있습니다 :) – kevin

+0

답장을 주셔서 감사합니다, btw .. 은 LIST <> 배열입니까? – kevin