首页 > 解决方案 > 如何移动对象而不卡顿?

问题描述

当我想朝某个方向移动时,在它不断移动之前会出现卡顿,直到我松开按键。我不知道如何解释它,但我希望它能够平稳地朝一个方向移动,而不会出现最初的口吃。

我试着搜索这个,但我真的不知道如何描述这个问题,我发现的所有教程都在做同样的事情。

        if (key.KeyCode == Keys.W)
        {
            picPlayer.Top -= 5;
        }

        if (key.KeyCode == Keys.S)
        {
            picPlayer.Top += 5;
        }

它看起来像这样

初始按键暂停→→→→→→→→→→→→ <连续移动

希望这是有道理的

编辑:(我正在使用视觉工作室)

标签: c#visual-studio

解决方案


这是一个非常简单的示例,可以帮助您入门。您需要添加对两个程序集的引用才能使其正常工作。

步骤 1.Solution Explorer右键单击References并选择PresentationCore并将WindowsBase这些引用添加到您的项目中。

步骤 2. 添加一个Timer到您的表单并设置属性如下(Name) = timer, Interval = 16。在事件选项卡上将Tick事件处理程序设置为timer_Tick(双击将自动执行此操作。

第 3 步。 这是表单的代码。

您还应该为Load表单上的事件添加一个事件处理程序,这里调用了处理程序Form1_Load。该代码还假定您picPlayer在窗体上调用了一个控件,在您的情况下可能是一个 PictureBox 控件。

using System;
using System.Windows.Forms;
using System.Windows.Input;

namespace MovePlayerDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer.Enabled = true;
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.W))
            {
                picPlayer.Top -= 5;
            }

            if (Keyboard.IsKeyDown(Key.S))
            {
                picPlayer.Top += 5;
            }
        }
    }
}

这应该让你开始。基本上发生的事情是您检查键盘状态的每个计时器滴答声,然后适当地更新游戏对象。请注意,有更好的方法来执行此“游戏循环”,但现在这将使其保持简单,您无需担心跨线程更新控件等。


推荐阅读