1

スレッド化されたサーフェスビューをコーディングしました。動作しますが、リフレッシュがうまくいかないようです。よくリフレッシュしないということは、EXです。ビットマップの位置を移動すると、最後の位置+で引き続き描画されます+は新しい位置です。

これが私のコードです:

public GameView(Context context) 
{               
    super(context);
    holder=getHolder(); 
    currentScreen=new TestScreen();
    currentScreen.Load(this.getResources());
}

protected void Resume()
{
    isRunning=true;
    renderThread=new Thread(this);
    renderThread.start();   
}


public void run() 
{
    while(isRunning)
    {
        gametime=lasttime-System.nanoTime();
        lasttime=System.nanoTime();
        if(!holder.getSurface().isValid())
                continue;

        if(!(currentScreen==null))
        {
            currentScreen.Update(gametime);
            Canvas cv=holder.lockCanvas();
            currentScreen.Draw(cv, gametime);        
            holder.unlockCanvasAndPost(cv);                         
        }       
    }
}

public void pause()
{
    isRunning=false;
    while(true)
    {
        try
        {
            renderThread.join();
        }
        catch (InterruptedException e)
        {

        }
        break;
    }
    renderThread=null;
}

Screen クラスのコード:

public void Load(Resources resources) {
    square=BitmapFactory.decodeResource(resources, R.drawable.square);
    x=y=0;
    super.Load(resources);
}

@Override
public void Update(long gametime) {
    x++;
    super.Update(gametime);
}

@Override
public void Draw(Canvas cv, long gametime) {
    cv.drawBitmap(square, x, y, null);
    super.Draw(cv, gametime);
}

Screen クラス メソッドなしで試してみましたが、同じことを行います。画面をクリアするためにいくつかの行が欠落していますか?

4

1 に答える 1