C#简单2d游戏 - 制作基本游戏循环

 翰茂文虹152 发布于 2022-12-13 18:14

虽然我有一些c#的经验,但这是我在C#中的第一款游戏.我正在尝试建立游戏最小骨架.我听说这Tick Event是创建主游戏循环的糟糕方法.

这是我想要实现的主要概念:

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)循环阻止游戏表单初始化.我找到了一些解决方案,通过使用System.Threading.Thread.Sleep(10);Application.DoEvents();,但我没有设法让它工作.

解释为什么我想要实现此验证码是一个例子使用上面的代码:
可以说,我想我的游戏做到以下几点:
平滑移动100x100 Black colored Square从点(x1,y1)(x2,y2)和向后,在一个循环,并在显示FPS label1的上面的代码.考虑到上面的代码,我可以使用TotalTimeElapsedInSeconds变量来设置移动的速度与Time而不是相关Frames,因为Frames每台机器上的不同.

// 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(?)

γηράσκω δ' α.. 6

帧率与平滑度无关.即使你达到500帧/秒,运动也会变得不稳定或更糟.诀窍是与您的显示器刷新率同步.因此,对于60Hz的显示器,您需要60帧/秒而不是更少.你不能通过在C#中使用循环来做到这一点.您需要DirectX或XNA.这些框架可以使您的绘图与显示器的垂直扫描同步.

1 个回答
  • 帧率与平滑度无关.即使你达到500帧/秒,运动也会变得不稳定或更糟.诀窍是与您的显示器刷新率同步.因此,对于60Hz的显示器,您需要60帧/秒而不是更少.你不能通过在C#中使用循环来做到这一点.您需要DirectX或XNA.这些框架可以使您的绘图与显示器的垂直扫描同步.

    2022-12-13 18:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有