0

我正在制作动态壁纸。而且我在尝试多线程我的精灵帧更改时遇到问题。我有一个更新方法和一个绘制方法

public void update() {

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        currentFrame = ++currentFrame % 2;

    }

    public void Draw(Canvas c, int sx, int sy){
        update();
        x = sx;
        y = sy;
        int srcX =  currentFrame * width;
        int srcY = 0;
        Rect src = new Rect(srcX,srcY,srcX+width,srcY+height);
        Rect dst = new Rect(x,y,x+width,y+height);
        c.drawBitmap(b, src, dst, null);

我试着上课

public class SecondThread extends Thread{
            public void run(){
                seaweed.update();

            }
            }

这会在自己的线程中运行更新,因此它们可以在不同的时间长度内休眠。一个人睡 50 人,另一个人睡 500 人。如果将 SecondThread 类放在 spirte 类中,它只会设置在第一帧上,如果我放入我的壁纸引擎类并尝试启动它,它会像一个步骤一样然后崩溃。我在这里做错了什么?

4

1 回答 1

0

更新 int 后尝试在视图上调用postInvalidate() 。就像是:

public void update() {

    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    currentFrame = ++currentFrame % 2;
    YourViewClass.this.postInvalidate();
}

public void Draw(Canvas c, int sx, int sy){
    update();
    x = sx;
    y = sy;
    int srcX =  currentFrame * width;
    int srcY = 0;
    Rect src = new Rect(srcX,srcY,srcX+width,srcY+height);
    Rect dst = new Rect(x,y,x+width,y+height);
    c.drawBitmap(b, src, dst, null);
于 2013-03-09T21:38:05.810 回答