이 사이트의 새로운 기능과 프로그래밍이 처음 인 새로운 기능. 나는 최근에 나의 코드를보다 잘 구성하고 관리하고 그것을보다 효율적이고 읽기 쉽고 포괄적으로 만들 수있는 새로운 기술을 배우려고 노력해왔다.인터페이스 - null 예외가 발생했습니다
이 좋아 잘 난 못해, 난 데 문제가, 내가 C 번호는 08
을 표현 사용하고 XNA 3.1에, 그것에 대해 너무 많이 갈 나는 InputHandler라는 아파트형 게임 conponent 업데이트를 지금까지는 키보드 입력을 검사하고 KeyboardState의 인스턴스에 결과를 저장하는 기본 루프 (Game1) 이후에 루프를 수행합니다. Get 속성이있는 유일한 다른 코드는 Esc 키를 누른 경우 실제로 Game1을 종료합니다. 입력 저장 후.
코드 : 문제에 이동
private KeyboardState keyboardstate;
public KeyboardState Keyboard_State
{
get { return (keyboardstate); }
}
public override void Update(GameTime gameTime)
{
keyboardstate = Keyboard.GetState();
if (keyboardstate.IsKeyDown(Keys.Escape))
Game.Exit();
base.Update(gameTime);
}
는 IInputHandler의 인스턴스를 통해 InputHandler의 Keyboard_State 속성에 액세스 다른 게임 conponent라는 카메라의 시도는
public interface IInputHandler
{
KeyboardState Keyboard_State { get; }
}
(이 BTW 인터페이스입니다)
이 인터페이스는 InputHandler 구성 요소 내에서 구현되는 것은 물론입니다. 오류로 이동, 잘 카메라 컨포넌트 내 일부 루프 코드를 인터페이스를 통해 Keyboard_State 속성에 액세스하려고 일부 논리 코드 내 내에서 루프, 다음 apropriatly 카메라를 변경합니다.
private IInputHandler input;
다음 코드는 카메라 구성 요소 내 .. 무효 업데이트 루프에 있습니다. (input.Keyboard_State! = NULL) * 라인, 그것은 인스턴스 아니라고 불평하는 경우
if (input.Keyboard_State !=null)
{
if (input.Keyboard_State.IsKeyDown(Keys.Left))
cameraYaw += spinRate;
if (input.Keyboard_State.IsKeyDown(Keys.Right))
cameraYaw -= spinRate;
if (cameraYaw > 360)
cameraYaw -= 360;
else if (cameraYaw < 360)
cameraYaw += 360;
}
는 내가 *에서 null 참조 예외를 얻을.
저는 Interfaces에 익숙하지 않습니다. 과거에 XNA를 배우기 시작하기 전까지는 사용법을 많이 보지 못했고, 구성 요소에 대해 배우기 시작했습니다. 궁극적으로는 기본 구성 요소를 만들어서 3D 게임 (아무것도 공상, 그냥 조직 및 관리).
어떤 도움을 주시면 감사하겠습니다. 감사합니다 :)
이* 기타 정보는 *
내 카메라 constructer는 다음과 같습니다
public Camera(Game game)
: base(game)
{
graphics = (GraphicsDeviceManager)Game.Services.GetService(typeof(IGraphicsDeviceManager));
input = (IInputHandler)game.Services.GetService(typeof(IInputHandler));
}
내 InputHandler의 constructer이 비어있는 내 GAME1의 constructer는 다음과 같습니다
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
camera = new Camera(this);
Components.Add(camera);
input = new InputHandler(this);
Components.Add(input);
input.UpdateOrder = 0;
camera.UpdateOrder = 1;
// this component alows Asyncroniously save/load game.
Components.Add(new GamerServicesComponent(this));
#if DEBUG
fps = new FPS(this);
Components.Add(fps);
fps.UpdateOrder = 1;
camera.UpdateOrder = 2;
#endif
}
입력이 입력 핸들러 게임 구성 요소의 인스턴스. 이 도움이
private InputHandler input;
희망 :
KeyboardState는 클래스가 아닌 구조입니다! null을 테스트 할 필요가 없습니다 (절대로 없을 것입니다!). 그러나 클래스와 달리 구조체는 new 연산자를 사용하지 않고 인스턴스화 할 수 있지만 필드는 할당되지 않은 상태로 유지되고 모든 필드가 초기화 될 때까지 var을 사용할 수 없으므로 첫 번째 예제와 같이 초기화해야합니다. – Steve