У меня проблема с логикой этого кода, метод обновления XNA - это быстро, поэтому, когда я пытаюсь установить значение 1 при каждом нажатии кнопки «вниз» на клавиатуре, это заканчивает обновление более чем просто 1XNA Menu Not Working
Посмотрите на код и посмотреть, если вы можете придумать лучший способ сделать это,
public void Update(GameTime gameTime)
{
var now = Keyboard.GetState();
KeyboardState old = Keyboard.GetState();
if (now.IsKeyDown(Keys.Down) && !old.IsKeyUp(Keys.Down))
{
properties.Menuposition++;
}
else if (now.IsKeyDown(Keys.Up) && !old.IsKeyUp(Keys.Up))
{
properties.Menuposition--;
}
else if (now.IsKeyDown(Keys.Enter))
{
properties.Menuposition = 5;
}
old = now;
}
это был метод обновления и это Draw метод
public void Draw(GameTime gametime, SpriteBatch spriteBatch)
{
if(properties.Menuposition == 0)
{
spriteBatch.DrawString(properties.Font, properties.Menu[0], properties.Playpos, Color.White);
spriteBatch.DrawString(properties.Font, properties.Menu[1], properties.Highscorepos, Color.White);
spriteBatch.DrawString(properties.Font, properties.Menu[2], properties.Exitpos, Color.White);
}
int menueitem = 0;
Vector2 play = new Vector2(320,117);
Vector2 highscore = new Vector2(320, 151);
Vector2 Exit = new Vector2(320,180);
spriteBatch.DrawString(properties.Font, properties.Menuposition.ToString(),new Vector2(100,100),Color.White);
if(properties.Menuposition == 1)
{
spriteBatch.DrawString(properties.Font, properties.Menu[0], play, Color.Yellow);
spriteBatch.DrawString(properties.Font, properties.Menu[1], highscore, Color.White);
spriteBatch.DrawString(properties.Font, properties.Menu[2], Exit, Color.White);
numberoftime = true;
menueitem = 1;
}
else if(properties.Menuposition == 2)
{
spriteBatch.DrawString(properties.Font, properties.Menu[0], play, Color.White);
spriteBatch.DrawString(properties.Font, properties.Menu[1], highscore, Color.Yellow);
spriteBatch.DrawString(properties.Font, properties.Menu[2], Exit, Color.White);
numberoftime = true;
menueitem = 2;
}
else if(properties.Menuposition == 3)
{
spriteBatch.DrawString(properties.Font, properties.Menu[0], play, Color.White);
spriteBatch.DrawString(properties.Font, properties.Menu[1], highscore, Color.White);
spriteBatch.DrawString(properties.Font, properties.Menu[2], Exit, Color.Yellow);
numberoftime = true;
menueitem = 3;
}
Я т но это означало бы, что мне пришлось бы изменить весь код, поэтому взгляните на него и посмотрите, есть ли у вас лучший способ сделать это.
Спасибо и с уважением, ..... :)