每X次迭代跳过代码的有效方法?

知道

我正在使用GameMaker Studio,您可以将其视为一个巨大的循环。

我使用计数器变量step来跟踪它是什么帧。

为了提高效率,我只想在每个第X步中运行一些代码。

if step mod 60 {

}

将每60步运行一次该块(或以60 fps的速度运行1秒钟)。

我的理解是模数是一项繁重的操作,但我想通过数千个步骤可以使计算失控。有没有更有效的方法可以做到这一点?

也许涉及按位运算符?

我知道这可以适用于所有其他框架:

// Declare
counter = 0

// Step
counter = (counter + 1) & 1

if counter {

}

还是即使在数量众多时,模量对60FPS的性能影响也可以忽略不计?

戴维斯林

在本质上:

i := 0
WHILE i < n/4
  do rest of stuff × 4
  do stuff that you want to do one time in four
  Increment i

Do rest of stuff i%4 times

这种取模数并根据其进行切换的变量称为Duff's Device。哪个更快取决于您的体系结构:在许多RISC芯片上,mod在单个时钟周期内执行,但是在其他CPU上,整数除法甚至可能不是本机指令。

如果您本身没有循环计数器,例如由于它是一个事件循环,则可以始终在执行代码的if块中制作一个并每四次重置一次:

i := 1
WHILE you loop
  do other stuff
  if i == 4
    do stuff
    i := 1
  else
    i := i + 1

这是一个示例,其中一件事要做两次,三件事要做一次:

WHILE looping
  do stuff
  do stuff a second time
  do stuff B
  do stuff a third time
  do stuff C
  do stuff a fourth time
  do stuff B
  do stuff a fifth time
  do stuff a sixth time
  do stuff B
  do stiff C

请注意,您所做的工作可以包括一次调用事件循环。

由于这样做可能很麻烦,因此您可以使用模板元编程以C ++的形式为您编写这些循环,如下所示:

constexpr unsigned a = 5, b = 7, LCM_A_B = 35;

template<unsigned N>
  inline void do_stuff(void)
{
  do_stuff_always();
  if (N%a)
    do_stuff_a(); // Since N is a compile-time constant, the compiler does not have to check this at runtime!

  if (N%b)
    do_stuff_b();

  do_stuff<N-1>();
}

template<>
  inline void do_stuff<1U>(void)
{
  do_stuff_always();
}

while (sentinel)
  do_stuff<LCM_A_B>(); 

但是,通常来说,如果您想知道您的优化是否有帮助,请介绍一下。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每X次迭代跳过代码的有效方法?

来自分类Dev

更有效的迭代方法

来自分类Dev

迭代熊猫中行的有效方法

来自分类Dev

在循环中每x秒输出值的最佳/最有效方法是什么

来自分类Dev

复制代码的更有效方法

来自分类Dev

进行熊猫操作和跳过行的有效方法

来自分类Dev

从迭代ArrayList内部删除对象的最有效方法

来自分类Dev

JS:通过迭代筛选结果的最有效方法?

来自分类Dev

迭代3D numpy数组的有效方法

来自分类Dev

迭代大向量的最有效方法?

来自分类Dev

从迭代ArrayList内部删除对象的最有效方法

来自分类Dev

为特定成员迭代数组的有效方法

来自分类Dev

迭代groupby Pandas数据框的更有效方法?

来自分类Dev

迭代多个列表/字典的更有效方法?

来自分类Dev

如何每n次迭代更改代码

来自分类Dev

C ++有效跳过多行

来自分类Dev

编写此代码段的有效方法?

来自分类Dev

获得星期几并运行代码的更有效方法?

来自分类Dev

对特定代码的更有效方法的建议

来自分类Dev

使用goto语句强制for循环的至少一次迭代的有效性

来自分类Dev

为什么某些语句仅对manim中for循环的最后一次迭代有效?

来自分类Dev

数组上的有效双迭代

来自分类Dev

限制迭代器是否有效

来自分类Dev

迭代器有效性

来自分类Dev

有效地迭代对象

来自分类Dev

c ++有效读取每X个字节中的前几个字节

来自分类Dev

有没有更有效的方法来重构Ruby上哈希的迭代?

来自分类Dev

跳过csv中的列到namedtuple函数的更有效方法?

来自分类Dev

访问矩阵或x / y值的有效方法