You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#开发太空侵略者游戏玩家无法移动,代码存在什么问题

问题修复说明

你的代码存在3个直接导致玩家无法移动的问题:

  • Walk方法内置while(true)死循环,直接调用会阻塞UI线程,导致窗口无响应、画面永远不会刷新
  • 位置更新逻辑没有执行入口,你既没有调用Walk方法,也没有填充gameTime定时器的Tick事件逻辑
  • 需确认keydown、keyup两个事件已经绑定到Form窗体上,否则按键状态不会被正确捕获

修复方案

  1. 删掉Walk方法的死循环,仅保留单次位置判断更新逻辑
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:57:03