我现在正在为 Android 开发一个相对较小的 2D 游戏。为了尽可能高效地处理碰撞检测,我创建了多个处理计算的线程:
线程#1:主要处理帧,将它们限制为每秒X,处理位图(旋转,绘制......)线程#2:计算一些冲突线程#3:计算其他冲突
我需要的是某种同步,但我不确定实现这一目标的最佳方法是什么。我想到了这样的事情:
线程#1:
public class Thread1 imlements Runnable {
public static ArrayList<Boolean> ResponseList = new ArrayList<Boolean>();
static {
ResponseList.add(0, false); // index 0 -> thread 1
ResponseList.add(1, false); // index 1 -> thread 2
}
public void run() {
boolean notFinished;
while(!isInterrupted() && isRunning) {
notFinished = true;
// do thread-business, canvas stuff, etc, draw
while(notFinished) {
notFinished = false;
for(boolean cur: ResponseList) {
if(!cur) notFinished = true;
}
// maybe sleep 10ms or something
}
}
}
}
在其他计算线程中,例如:
public class CalcThread implements Runnable {
private static final INDEX = 0;
public void run() {
while(isRunning) {
ResponseList.set(INDEX, false);
executeCalculations();
ResponseList.set(INDEX, true);
}
}
}
还是使用 Looper/Handler 组合会更快(因为这是我所关心的)?刚刚阅读了这个,但我还不确定如何实现这个。会更深入地研究这将是更有效的方法。