0

目前我正在考虑以下问题,也许有人可以帮助我:

对于我的世界,我想更改很多块并防止滞后,我只想同时更改几个块。要更改长方体,我通常使用这样的循环:

for(int x=t.x; x<t.X; x++) 
  for(int y=t.y; y<t.Y; y++) 
    for(int z=t.z; z<t.Z; z++) {
      // ..
    }

其中 t 保存 from 和 to 坐标。

现在我想保存当前进度以便以后继续。

请帮助我厌倦了思考它..

4

1 回答 1

1

您的代码看起来像 C。在 C 中,进程在离开调用函数后无法返回到给定的堆栈状态。因此,在语言级别上离开循环并稍后返回它是不可能的。在其他语言中,情况有所不同。例如,在 Python 语言的 Pypy 实现中,可以使用continuelets来实现您所描述的。

但是,您可以通过使用自己的对象来存储最后一个计数器来实现类似的方法。

struct counters { int x, y, z; };

bool continueLoops(struct counters *ctrs) {
  for (; ctrs->x < t.X; ctrs->x++) {
    for (; ctrs->y < t.Y; ctrs->y++) {
      for (; ctrs->z < t.Z; ctrs->z++) {
        // ..
        if (weWantToInterruptTheLoop)
          return true;
      }
      ctrs->z = t.z;
    }
    ctrs->y = t.y;
  }
  return false;
}

void startLoops() {
  struct counters ctrs;
  ctrs.x = t.x;
  ctrs.y = t.y;
  ctrs.z = t.z;
  while (continueLoops(&ctrs)) {
    // do whatever you want to do between loops
  }
}

但是,与直接在内部循环中执行相关操作相反,我认为上述方法没有太多好处。所以我不确定这对你是否有用。

于 2012-11-15T19:11:58.950 回答