首页 / C# / C#简单2d游戏 – 制作基本游戏循环
C#简单2d游戏 – 制作基本游戏循环
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#简单2d游戏 – 制作基本游戏循环,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2100字,纯文字阅读大概需要4分钟。
内容图文
![C#简单2d游戏 – 制作基本游戏循环](/upload/InfoBanner/zyjiaocheng/818/ced0a72cd65c4deea832b4f998416c22.jpg)
虽然我有一些c#的经验,但这是我在C#中的第一款游戏.我正在尝试建立游戏的最小骨架.我听说Tick事件是创建主游戏循环的糟糕方法.
这是我想要实现的主要概念:
Program.cs中
//Program.cs calls the Game Form.
Application.Run(new Game());
Game.cs
public partial class Game : Form
{
int TotalFramesCount = 0;
int TotalTimeElapsedInSeconds = 0;
public Game()
{
InitializeComponent();
GameStart();
}
public void GameStart()
{
GameInitialize();
while(true)
{
GameUpdate();
TotalFramesCount++;
CalculateTotalTimeElapsedInSeconds();
//Have a label to display FPS
label1.text = TotalFramesCount/TotalTimeElapsedInSeconds;
}
}
private void GameInitialize()
{
//Initializes variables to create the First frame.
}
private void GameUpdate()
{
// Creates the Next frame by making changes to the Previous frame
// depending on users inputs.
}
private void CalculateTotalTimeElapsedInSeconds()
{
// Calculates total time elapsed since program started
// so that i can calculate the FPS.
}
}
现在,这将无法工作,因为while(true)循环阻止Game Form初始化.我通过使用System.Threading.Thread.Sleep(10)找到了一些解决方案.或Application.DoEvents();,但我没有设法让它工作.
要解释我为什么要在此处实现此代码,请使用上面的代码示例:
让我们说我想让我的游戏做到以下几点:
将100×100黑色方块从点(x1,y1)平滑移动到(x2,y2)并向后平移,并在上面的代码的label1中显示FPS.考虑到上面的代码,我可以使用TotalTimeElapsedInSeconds变量来设置移动速度与时间而不是帧相关,因为每台机器上的帧都不同.
// Example of fake code that moves a sqare on x axis with 20 pixels per second speed
private void GameUpdate()
{
int speed = 20;
MySquare.X = speed * TotalTimeElapsedInSeconds;
}
我使用while(true)循环的原因是我将在每台机器上获得最佳FPS.
>我如何在实际代码上实现我的想法? (只是基本的骨架是我正在寻找的)
>我怎么能设置最大值,让500 FPS使代码“更轻”运行?而不是试图产生尽可能多的帧,我怀疑它会过度使用CPU(?)
解决方法:
帧率与平滑度无关.即使你达到500帧/秒,运动也会变得不稳定或更糟.诀窍是与您的显示器刷新率同步.因此,对于60Hz的显示器,您需要60帧/秒不超过.你不能通过在C#中使用循环来做到这一点.您需要DirectX或XNA.这些框架可以使您的绘图与显示器的垂直扫描同步.
内容总结
以上是互联网集市为您收集整理的C#简单2d游戏 – 制作基本游戏循环全部内容,希望文章能够帮你解决C#简单2d游戏 – 制作基本游戏循环所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。