【发布时间】:2018-02-02 21:02:40
【问题描述】:
首先我会解释我想要做什么,然后我会提供一个建议的解决方案。
问题
我正在运行一个游戏,我希望每帧都做一定量的工作。例如,我有 N 个对象在队列中等待初始化(想象初始化是一个相当昂贵的操作,N 很大),将它们全部添加后,我想创建它们的碰撞盒,然后,我想将它们合并在一起以限制渲染调用。我不能在不同的线程上执行这些操作,因为所有这些东西都与游戏世界密切相关。但是我想将所有这些操作分成小块来运行每一帧,以便最小化延迟(帧率下降)。我该怎么做呢?
建议的解决方案
如果有一个函数可以在一次调用后停止并在再次调用后从中断处继续:
例如,
boolean loadEverything() {
for (int i = 0; i < objectsToAdd.length; i++) {
world.add(objectsToAdd[i]);
if (i % 10 == 0) {
return stop();
}
}
makeCollision();
return stop();
mergeObjects();
return true;
}
调用loadEverything() the first objectsToAdd/10 次,一次将 10 个对象添加到游戏世界。然后调用它应该运行makeCollision() 然后停止。再次调用它运行mergeObjects(),然后函数返回true。在调用者函数中,我会运行 loadEverything() 直到它返回 true。
我知道存在类似here 描述的 yield-return、yield-break 实现,但我想知道它们是否有更通用的实现,或者可能存在不需要的更好的解决方案任何额外的依赖项。
【问题讨论】: