目前我正在考虑以下问题,也许有人可以帮助我:
对于我的世界,我想要改变很多块并防止滞后我想同时改变几个块。要改变长方体,我通常使用这样的循环:
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 coords。
现在我想保存当前进度以便稍后继续。
请你帮我思考它。
答案 0 :(得分: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
}
}
但是,我没有看到上述方法有多大好处,而不是直接在内循环中执行相关操作。所以我不确定这对你有用。