я и новичок в этом сайте и новичок в программировании Недавно я пытался освоить новые навыки, которые помогут лучше организовать / управлять моим кодом и сделать его более эффективным, читаемым и содержательным.
Хорошо, я не буду слишком много говорить об этом, у меня проблема в XNA 3.1, я использую C # express 08.
У меня есть автономный компонент Game под названием InputHandler, обновление проходит после базового цикла (Game1), который до сих пор просто проверяет ввод с клавиатуры и сохраняет результат в экземпляре KeyboardState, который имеет свойство Get, единственное другое на самом деле код выходит из Game1, если нажата клавиша Escape, которую он проверяет после сохранения ввода.
Код:
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);
}
переходя к проблеме, другой компонент игры под названием Camera пытается получить доступ к свойству Keyboard_State InputHandler через экземпляр IInputHandler (кстати, это интерфейс)
public interface IInputHandler
{
KeyboardState Keyboard_State { get; }
}
Само собой разумеется, что этот интерфейс реализован в компоненте InputHandler. Переходя к ошибке, у меня в цикле обновления внутри компонента Camera есть некоторый логический код, который пытается получить доступ к свойству Keyboard_State через интерфейс, проверить некоторые условия и затем соответствующим образом изменить камеру.
private IInputHandler input;
следующий код находится в цикле обновления void .. в компоненте Camera.
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 в строке * if (input.Keyboard_State! = Null) *, жалуясь, что это не экземпляр.
Я новичок в области интерфейсов, в прошлом я никогда не видел для них особой пользы, пока не начал пытаться изучать XNA и начал изучать компоненты, в конечном итоге я хочу создать базовые компоненты для управления 3D игра (ничего особенного, просто организованная и управляемая).
любая помощь будет оценена. спасибо:)
* Другая информация *
мой конструктор камеры:
public Camera(Game game)
: base(game)
{
graphics = (GraphicsDeviceManager)Game.Services.GetService(typeof(IGraphicsDeviceManager));
input = (IInputHandler)game.Services.GetService(typeof(IInputHandler));
}
и мой конструктор InputHandler пуст, мой конструктор Game1:
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
}
input является экземпляром игрового компонента Input input.
private InputHandler input;
надеюсь, это поможет:)