c控制台应用程序-当一个值在x时间内没有改变时(重复帧),如何执行一个函数

本文关键字:一个 改变 执行 函数 何执行 时间 应用程序 控制台 | 更新日期: 2023-09-27 18:21:42

我的主要问题是,我正在为游戏编写一个运动模拟器,我想做的是,检查角色是否卡住了,它的位置是否没有改变。

所以我想的是这样的:

如果Me.Location3DX相同时间量->Me.SetLocation(Location3D.X = Location3D.X +1, Location3D.Y = Location3D.Y +1)

public void Pulse(float dt)
{
    Skandia.Update();
    Me = Skandia.Me;
    if (Me == null)
    {
        return;
    }
    //This void repeats every frame of the game
    //functions should take place below
}

如果有人知道如何检查经过的时间,那就太好了。

遗憾的是,我还没有在stackoverflow上找到这么具体的东西,只是说,因为这个话题听起来很笼统。

问候

c控制台应用程序-当一个值在x时间内没有改变时(重复帧),如何执行一个函数

如果你在玩游戏,你应该使用一个主循环。解决方案非常简单。

每次进入此方法时,请检查两次操作之间的间隔时间。

您应该阅读此链接:https://msdn.microsoft.com/en-us/library/bb203873.aspx

可变步长游戏循环

可变步长游戏在连续循环中调用其Update和Draw方法,而不考虑TargetElapsedTime。将Game.IsFixedTimeStep设置为false会导致游戏使用可变步长游戏循环。

动画和定时

对于需要精确计时的操作,如动画,游戏使用的游戏循环类型(固定步长或可变步长)很重要。

使用固定的步骤允许游戏逻辑使用TargetElapsedTime作为其基本时间单位,并假设Update将在该时间间隔调用。使用可变步骤需要游戏逻辑和动画代码基于ElapsedGameTime,以确保游戏流畅。由于Update方法是在绘制上一帧之后立即调用的,因此调用Update的时间可能会有所不同。如果不考虑两次通话之间的时间,游戏似乎会忽快忽慢。Update方法的gameTime参数中提供了调用Update方法之间经过的时间。您可以通过调用ResetElapsedTime来重置经过的时间。

当使用可变步长游戏循环时,应该以每毫秒(ms)为游戏单位来表示速率,比如精灵移动的距离。精灵在任何给定更新中的移动量可以计算为精灵的速率乘以经过的时间。使用这种方法来计算精灵移动的距离可以确保如果游戏或计算机的速度发生变化,精灵将始终移动。

我通常会用这样一个简短的回答来评论,但我的声誉很差。我的解决方案只是用一个变量来跟踪它,并在需要时重置,以防角色移动。

    Double elapsedTimeInMS = 0;
    private void YourTimer(object sender, EventArgs e)
    {
        //Every 10 ms
        elapsedTimeInMS += 10;
    }
    private void btnClick(object sender, EventArgs e)
    {
        //In your case the character moves
        MessageBox.Show(elapsedTimeInMS + "");
        elapsedTimeInMS = 0;
    }

编辑后
您需要对计时器进行检查,看看经过的时间是否不会变得太高。