Так что я использую Gamestates в своей игре, и у меня ошибка при достижении игры или выигрыш экрана. Я попытался закодировать его так, что, когда вы нажимаете M, он возвращается в исходное главное меню, чтобы вы могли снова начать воспроизведение.
Однако при нажатии M игра кажется ошибкой, и главное меню постоянно мигает, и когда она останавливается, вы нажимаете кнопку воспроизведения, и она возвращает вас на экран игры или выигрыша! Я пробовал отлаживать его, но безрезультатно. Я попробую добавить соответствующий код ниже.Gamestates, вызывающий ошибку в моей игре
В Update:
switch (CurrentGameState)
{
case GameState.MainMenu:
if (btnPlay.isClicked == true) CurrentGameState = GameState.Playing;
btnPlay.Update(mouse);
if (btnInstructions.isClicked == true) CurrentGameState = GameState.Instructions;
btnInstructions.Update(mouse);
break;
case GameState.Instructions:
if (instrPlay.isClicked == true) CurrentGameState = GameState.Playing;
instrPlay.Update(mouse);
break;
case GameState.Playing:
//functions for game playing here
#region game over
if (hastouched2 > 0 && Ball.ballPos.Y > 740 || hastouched3 > 0 && Ball.ballPos.Y > 740 || Box == null && Ball.ballPos.Y > 740)
CurrentGameState = GameState.Gameover;
#endregion
break;
case GameState.Gameover:
if (Keyboard.GetState().IsKeyDown(Keys.M))
CurrentGameState = GameState.MainMenu;
break;
case GameState.YouWin:
if (Keyboard.GetState().IsKeyDown(Keys.M))
CurrentGameState = GameState.MainMenu;
break;
}
base.Update(gameTime);
В розыгрыше:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
switch (CurrentGameState)
{
case GameState.MainMenu:
spriteBatch.Draw(Content.Load<Texture2D>("mainMenu"), new Rectangle(0, 0, screenWidth, screenHeight), Color.White);
btnPlay.Draw(spriteBatch);
btnInstructions.Draw(spriteBatch);
break;
case GameState.Instructions:
spriteBatch.Draw(Content.Load<Texture2D>("instructions_screen"), new Rectangle(0, 0, screenWidth, screenHeight), Color.White);
instrPlay.Draw(spriteBatch);
break;
case GameState.Playing:
spriteBatch.Draw(background, bgPos, Color.White);
if (Box != null)
{
Box.Draw(spriteBatch);
}
if (Box2 != null)
{
Box2.Draw(spriteBatch);
}
if (Box3 != null)
{
Box3.Draw(spriteBatch);
}
break;
case GameState.Gameover:
spriteBatch.Draw(Content.Load<Texture2D>("gameover"), new Rectangle(0, 0, screenWidth, screenHeight), Color.White);
break;
case GameState.YouWin:
spriteBatch.Draw(Content.Load<Texture2D>("youwin"), new Rectangle(0, 0, screenWidth, screenHeight), Color.White);
break;
Спасибо, Rich
Прежде всего, если у вас есть проблема, попробуйте опубликовать соответствующий код, а не ссылку на весь ваш проект, вы должны приложить все усилия. И что вы подразумеваете под «сбросом нулевых объектов»? Если они вам понадобятся, вы можете создать новый экземпляр. – pinckerman
В любом случае, если игра вернет вас к экрану игры или выиграть при перезагрузке, вы, вероятно, не настроите игру для игр на что-то другое, кроме «Gameover» или что-то еще. Вы должны добавить код, который вы используете для перезапуска игры. – pinckerman
попытается добавить соответствующий код сейчас – Rich