1

嗨,每次在我的游戏中破坏某些东西后,我都会创建一个爆炸动画的新对象,该对象是通过在我的表面视图线程中使用线程类来完成的。在短时间内摧毁多艘船后,应用退出活动。为什么是这样?

explosion ex = new explosion(x,y);
ex.start();

class explosion extends Thread implements Runnable{

    private long startTime;
    private int num = 0;
    private int x;
    private int y;
    public explosion(int mx, int my){
        x = mx;
        y = my;
        startTime = System.currentTimeMillis();
    }
    public void run(){
        while(num < 3){
            long millis = System.currentTimeMillis();
            canvas.drawBitmap(explosions.get(num),x,y,null);
            if(millis - startTime > 50){
                startTime = System.currentTimeMillis();
                num++;
                Log.d("Explosion","Animate");
            }
        }
        Log.d("Explosion","End Thread");
    }
};
4

2 回答 2

2

从developer.android复制...

不管你是否使用 AsyncTask,请始终记住这两条关于单线程模型的规则:

- 不阻塞 UI 线程,

- 并确保您仅在 UI 线程上访问 AndroidUI 工具包。

我相信这条线会导致你崩溃......

canvas.drawBitmap(explosions.get(num),x,y,null);

此链接详细说明了在另一个线程上更新 UI 的步骤:

http://developer.android.com/resources/articles/painless-threading.html

于 2012-05-08T21:22:41.043 回答
0

它闻起来像一个设计问题。为什么要为动画运行线程?恕我直言,我认为您应该在当前线程中运行它并使用基于时间的动画。您几乎不需要更改您的代码,因为它已经是基于时间的。

于 2012-05-08T21:29:57.527 回答