如何在MonoGame中实现无需复杂逻辑的简易启动标题屏?
简易MonoGame启动标题屏实现
直接用一个布尔变量控制游戏状态,完全符合你要的简洁需求,不用枚举这类复杂结构:
1. 添加状态控制变量
在你的游戏类(比如Game1)里添加一个布尔字段:
private bool _isGameStarted = false;
2. 修改Update方法
只在游戏启动后运行核心逻辑,同时监听空格键触发启动:
protected override void Update(GameTime gameTime) { var keyboardState = Keyboard.GetState(); // 检测空格键按下,启动游戏 if (!_isGameStarted && keyboardState.IsKeyDown(Keys.Space)) { _isGameStarted = true; // 如有需要,可在此初始化游戏数据(比如重置计时器) } // 仅游戏启动后执行核心机制(计时器、玩家逻辑等) if (_isGameStarted) { // 这里放你的玩家更新、计时器累加、碰撞检测等代码 // 示例:player.Update(gameTime); timer += (float)gameTime.ElapsedGameTime.TotalSeconds; } base.Update(gameTime); }
3. 修改Draw方法
先绘制启动屏,游戏启动后再执行原有绘制逻辑:
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Black); _spriteBatch.Begin(); if (!_isGameStarted) { // 绘制启动标题与提示 int screenWidth = GraphicsDevice.Viewport.Width; int screenHeight = GraphicsDevice.Viewport.Height; _spriteBatch.DrawString(MainFont, "MY GAME", new Vector2(screenWidth/2 - 100, screenHeight/2 - 50), Color.Gold); _spriteBatch.DrawString(MainFont, "PRESS SPACE TO START", new Vector2(screenWidth/2 - 180, screenHeight/2 + 20), Color.White); // 如需启动背景图,添加:_spriteBatch.Draw(startScreenTexture, Vector2.Zero, Color.White); } else { // 你的原有游戏绘制代码 if (!player.dead) player.animation.Draw(_spriteBatch); if (!player.dead) { _spriteBatch.DrawString(MainFont, $"Time survived: {timer.ToString("F3")}", new Vector2(player.Position.X - 240, player.Position.Y + 270), Color.White); } else { _spriteBatch.Draw(endScreen, new Vector2(player.Position.X -900, player.Position.Y - 700), Color.White); _spriteBatch.DrawString(MainFont, "YOU DIED", new Vector2(player.Position.X - 155.0f, player.Position.Y - 70), Color.Gold); _spriteBatch.DrawString(MainFont, "PRESS ESCAPE TO EXIT", new Vector2(player.Position.X - 325.0f, player.Position.Y -10.0f), Color.Gold); _spriteBatch.DrawString(MainFont, $"Time Survived: {timer.ToString("F3")}", new Vector2(player.Position.X - 280.0f, player.Position.Y + 50.0f), Color.White); } } _spriteBatch.End(); base.Draw(gameTime); }
实现说明
- 游戏启动前,
Update中的核心逻辑完全不执行,计时器、玩家更新等进程不会后台运行 - 仅用单个布尔变量控制状态,没有复杂的状态管理逻辑
- 启动屏与原有结束屏逻辑完全分离,代码结构清晰
内容的提问来源于stack exchange,提问作者revivetime
相关产品推荐
相关产品推荐

