0

我现在正在为 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 组合会更快(因为这是我所关心的)?刚刚阅读了这个,但我还不确定如何实现这个。会更深入地研究这将是更有效的方法。

4

1 回答 1

0

我不知道它是否会更快,但肯定会更可靠。例如,您在没有序列化的多个线程中使用 ArrayList,并且 ArrayList 不是线程安全的

处理程序只是可用的机制之一,我建议您研究一下java.util.concurrent——重新发明轮子没有意义,许多同步原语已经可用。也许Future会为你工作

Future 表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。

于 2013-08-23T14:13:44.347 回答