C#开发太空侵略者游戏玩家无法移动,代码存在什么问题
问题修复说明
你的代码存在3个直接导致玩家无法移动的问题:
Walk方法内置while(true)死循环,直接调用会阻塞UI线程,导致窗口无响应、画面永远不会刷新- 位置更新逻辑没有执行入口,你既没有调用
Walk方法,也没有填充gameTime定时器的Tick事件逻辑 - 需确认
keydown、keyup两个事件已经绑定到Form窗体上,否则按键状态不会被正确捕获
修复方案
- 删掉
Walk方法的死循环,仅保留单次位置判断更新逻辑 - 在
gameTime_Tick事件中调用位置更新逻辑,同时要提前在设计器里把gameTime定时器的Enabled属性设为true,触发间隔设为20ms左右保证移动流畅
修正后完整代码
using System; using System.Windows.Forms; namespace _2nd_game_try { public partial class Form1 : Form { bool goleft, goright; int playerSpeed = 13; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void keydown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Left) { goleft = true; } if (e.KeyCode == Keys.Right) { goright = true; } } private void keyup(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Left) { goleft = false; } if (e.KeyCode == Keys.Right) { goright = false; } } private void gameTime_Tick(object sender, EventArgs e) { // 每次定时器触发就更新一次玩家位置 UpdatePlayerPosition(); } private void UpdatePlayerPosition() { // 删掉死循环,单次执行位置更新 if (goleft) { player.Left -= playerSpeed; } if (goright) { player.Left += playerSpeed; } } } }
内容的提问来源于stack exchange,提问作者Katsu
相关产品推荐
相关产品推荐

