我正在制作iphone shmup,并试图确定要使用哪种类型的游戏循环。我想使用半固定时间步或完全固定时间步。
使用半固定时间步长,我将进行零次或多次update(FIXED_INTERVAL)调用,然后进行一次update(dt)调用,其中每个游戏循环中dt <= FIXED_INTERVAL。据我所知,这种方法的缺点是我的物理update(dt)逻辑将更加难以编程,因为我基本上必须为每次更新都假设一个变量dt。然后我还听说由于浮点值每次都不相同,因此每次游戏的运行都会稍有不同。
然后用固定的时间步长,我进行零次或多次update(FIXED_INTERVAL)调用,然后进行一次插值(dt / FIXED_INTERVAL)调用,其中每个游戏循环中dt <FIXED_INTERVAL。
因此,看来我真正要做的一个重大决定是:我是否想应对使用变量dt实现update(dt)的挑战,还是我想应对实现插值的挑战?
现在,根据我的阅读,大多数人都说要使用完全固定并进行插值。但是,当我考虑实现插值时,似乎比带有变量dt的update(dt)要复杂得多。这是因为如果使用插值,则必须记住先前的状态和当前的状态。因此,如果我想使用插值法,我必须提出一个额外的间接层,以抽象出整个游戏状态。在半固定的时间步中,我不必使用插值法,而我也不必提出游戏状态抽象,因为总只有一个游戏状态,而这仅仅是代表我的敌人和敌人的“全局数组”子弹等
因此,更实际的选择是:知道变量dt会使我的物理更新变得复杂,因此我是否可以半固定地实现它。还是我使用完全固定的并尝试提出游戏状态抽象,以便可以跟踪先前状态和当前状态以执行插值?