如何在C#XNA中创建计时器/计数器

如何在C#XNA中创建计时器/计数器,c#,timer,xna,clock,game-development,C#,Timer,Xna,Clock,Game Development,我对C#编程相当陌生,这是我第一次在XNA中使用它。我正试图和一个朋友一起制作一个游戏,但我们正在努力制作一个基本的计数器/时钟。我们需要的是一个计时器,从1开始,每2秒+1,最大容量为50。任何关于编码的帮助都会很好!谢谢。要在XNA中创建计时器,您可以使用以下内容: int counter = 1; int limit = 50; float countDuration = 2f; //every 2s. float currentTime = 0f; currentTime += (f

我对C#编程相当陌生,这是我第一次在XNA中使用它。我正试图和一个朋友一起制作一个游戏,但我们正在努力制作一个基本的计数器/时钟。我们需要的是一个计时器,从1开始,每2秒+1,最大容量为50。任何关于编码的帮助都会很好!谢谢。

要在XNA中创建计时器,您可以使用以下内容:

int counter = 1;
int limit = 50;
float countDuration = 2f; //every  2s.
float currentTime = 0f;

currentTime += (float)gameTime.ElapsedGameTime.TotalSeconds; //Time passed since last Update() 

if (currentTime >= countDuration)
{
    counter++;
    currentTime -= countDuration; // "use up" the time
    //any actions to perform
}
if (counter >= limit)
{
    counter = 0;//Reset the counter;
    //any actions to perform
}

我绝对不是C#或XNA方面的专家,因此我非常感谢任何提示/建议。

如果您不想使用XNA ElapsedTime,可以使用C#计时器。你可以在这里找到关于这个的教程

不管怎样,这里有一些代码或多或少地满足了您的需求

首先,您需要在类中声明如下内容:

    Timer lTimer = new Timer();
    uint lTicks = 0;
    static uint MAX_TICKS = 50;
然后你需要在任何你想要的地方初始化计时器

    private void InitTimer()
    {
        lTimer       = new Timer();
        lTimer.Interval = 2000; 
        lTimer.Tick += new EventHandler(Timer_Tick);
        lTimer.Start();
    }
然后,在Tick eventhandler中,您应该每50个Tick执行您想执行的任何操作

    void Timer_Tick(object sender, EventArgs e)
    {
        lTicks++;
        if (lTicks <= MAX_TICKS)
        {
            //do whatever you want to do
        }
    }
void Timer\u Tick(对象发送方,事件参数e)
{
lTicks++;

如果(非常感谢,我将尝试这两种方法,看看哪种方法最合适。-1.XNA不是基于事件的API。使用基于事件的计时器是不合适的。使用经过的时间是合适的。我决定使用类似于您给我的答案的方法;但是,我不知道应该使用什么操作。TotalSeconds这是唯一的y我现在收到的错误。你有什么方法可以帮我吗?编辑:我收到的错误是“NullReferenceException was unhandled”对象引用未设置为对象的实例。你只能因为游戏时间而出现该错误,因此a)你没有将游戏时间传递给该方法,b)您没有在更新方法或c)中同时使用此参数!gameTime必须是从XNA中的标准循环接收的参数。如果ElapsedGameTime是自上次更新()函数以来经过的时间,则使用TotalSeconds属性没有意义。对于MonoGame(已采用XNA的基本功能),最好对动画使用TotalMillimess属性。对于游戏计时器,最好使用TotalGameTime而不是ElapsedGameTime