如何为每(数)毫秒运行一次的游戏制作“循环”?
Posted
技术标签:
【中文标题】如何为每(数)毫秒运行一次的游戏制作“循环”?【英文标题】:How do I make a "loop" for a game, that runs every (number) of milliseconds? 【发布时间】:2013-08-20 14:53:08 【问题描述】:我尝试在google和***上搜索这个,但我不知道该怎么称呼它,所以我找不到它。
如何为 C# 程序创建一个“循环”,它每隔 100 毫秒运行一次?类似于 Minecraft 所称的“滴答声”,或 GameMaker 所称的“步骤”。
我不知道该怎么做。我正在使用视觉工作室,我有一个主窗口。有些事情我想不断地执行,所以我想弄清楚如何制作“步骤”或“更新”功能。
【问题讨论】:
使用while
和Timer
?
您应该使用某种可以为您提供此功能的游戏设计框架。你不是吗?
您可以使用 XNA,它具有为此目的而设计的更新和绘制方法。但是我觉得 XNA 已经死了,你也可以看看 MonoGame。
@AthomSfere 只有在循环代码需要 0 毫秒才能运行时才有效。它不会。其次,Sleep
对于大多数游戏来说没有足够的精度;它最终会睡过头。
@Gjeltema 我不知道。我不是该领域的专家。我知道的足够多,知道我不想解决这个问题;我会使用游戏设计 API,而不是冒险做错。
【参考方案1】:
如果您希望它运行 100 毫秒,您可以这样做
System.Timers.Timer timer = new System.Timers.Timer(100);
public void Initialize(object sender, EventArgs e)
timer.Elapsed+=Elapsed;
public void Elapsed(object sender, System.Timers.ElapsedEventArgs e)
//do stuff
你可以做一些其他的事情,但是我认为这个没有那么有效
using System.Threading;
Thread th = new Thread(new ThreadStart(delegate
while (true)
Thread.Sleep(100);
//do stuff
));
或者,你可以下载monogame用c#制作更精致的游戏
http://www.monogame.net/
它有自己的游戏时间控件。
【讨论】:
Timer
的精度对于游戏循环来说是不够的。它的精度是 +/- 16 毫秒或类似的东西。游戏不可能有这种差异。
那你有什么建议吗,Servy?
那我何时以及如何致电Initialize
?我试图这样做,但我不知道要调用什么参数。
您只需双击您的表单,即可创建 Form1_Load。您可以右键单击>折射器>将其重命名为 Initialize。
@user2697979 不;如果我这样做了,我会发布一个答案。我不是游戏设计专家。我对这个主题有足够的了解,知道这是一个非常难以解决的问题,而这与真正的解决方案相去甚远。【参考方案2】:
您可以使用 Timer 控件,该控件可以设置为在给定的时间间隔内滴答作响。间隔属性以毫秒为单位,因此您需要 Timer1.Interval = 100;
【讨论】:
Timer
的精度对于游戏循环来说是不够的。它的精度是 +/- 16 毫秒或类似的东西。游戏不可能有这种差异。【参考方案3】:
你在想Timer
吗?
http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx
在应用程序中生成重复事件。
【讨论】:
Timer
的精度对于游戏循环来说是不够的。它的精度是 +/- 16 毫秒或类似的东西。游戏不可能有这种差异。以上是关于如何为每(数)毫秒运行一次的游戏制作“循环”?的主要内容,如果未能解决你的问题,请参考以下文章