C#开发Pong游戏使用enum表示玩家方向功能不生效问题求助
Pong游戏Enum使用错误修复方案
核心问题
你定义的全局UpDown枚举字段从未被正确赋值,按键事件中声明的都是仅在方法内生效的局部变量,方法执行完就被销毁,所以移动逻辑永远不会触发。
具体修改步骤
- 先修正枚举定义,补充静止状态、修正拼写错误
// 原错误代码:enum Deraction {goUp, goDown} // 修改为 enum Direction { Idle, GoUp, GoDown } // 同步修改对应的全局字段,替换原来的Deraction UpDown; Direction playerMoveState = Direction.Idle;
加Idle状态是为了实现松开按键后玩家 paddle 静止的效果,符合游戏操作逻辑。
- 修正按键按下事件逻辑,直接修改全局枚举字段,不要声明局部变量
private void keyIsDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Down) { playerMoveState = Direction.GoDown; } else if (e.KeyCode == Keys.Up) { playerMoveState = Direction.GoUp; } }
- 修正按键抬起事件逻辑,松开按键后设置为静止状态
private void keyIsUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down) { playerMoveState = Direction.Idle; } }
- 同步修改timerTick中的玩家移动判断逻辑
// 替换原来的UpDown相关判断 if (playerMoveState == Direction.GoUp && player.Top > topScreen) { player.Top -= playerSpeed; } if (playerMoveState == Direction.GoDown && player.Top < bottemScreen) { player.Top += playerSpeed; }
额外优化提示
你代码里存在少量拼写错误,后续维护可以顺便修正:
- Deraction → Direction
- bottem → bottom
- middel → middle
- bouwns → bounces
内容的提问来源于stack exchange,提问作者Massuus
相关产品推荐
相关产品推荐

