c# - 如何移动对象而不卡顿?
问题描述
当我想朝某个方向移动时,在它不断移动之前会出现卡顿,直到我松开按键。我不知道如何解释它,但我希望它能够平稳地朝一个方向移动,而不会出现最初的口吃。
我试着搜索这个,但我真的不知道如何描述这个问题,我发现的所有教程都在做同样的事情。
if (key.KeyCode == Keys.W)
{
picPlayer.Top -= 5;
}
if (key.KeyCode == Keys.S)
{
picPlayer.Top += 5;
}
它看起来像这样
初始按键→暂停→→→→→→→→→→→→ <连续移动
希望这是有道理的
编辑:(我正在使用视觉工作室)
解决方案
这是一个非常简单的示例,可以帮助您入门。您需要添加对两个程序集的引用才能使其正常工作。
步骤 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;
}
}
}
}
这应该让你开始。基本上发生的事情是您检查键盘状态的每个计时器滴答声,然后适当地更新游戏对象。请注意,有更好的方法来执行此“游戏循环”,但现在这将使其保持简单,您无需担心跨线程更新控件等。
推荐阅读
- node.js - 假设在“fs.writeFileStream”完成写入并在管道之后关闭文件后触发读取流“结束”事件是否安全?
- random - 如何在 Julia 中生成一系列随机浮点数?
- r-markdown - 在 Rmarkdown 中引用带有字幕的字幕时,字幕编号不按顺序排列
- python - Python:光标“NoneType”对象没有属性
- amazon-web-services - AWS Glue API 无法识别带有连字符的分区
- scala - 使用密封特征/案例类播放 JSON:无限递归
- javascript - 如何从 React 类外部更改模态状态?
- android - 无法在 Android 小部件按钮上发出 Http 请求。
- jenkins - Jenkins:Git 无法连接到存储库,返回状态码 128
- python-3.x - Mitmproxy 如何从脚本启动,并将转储保存到文件