2

画面上に 3 秒ごとに複数のゲーム オブジェクトを作成して表示するのに問題があります。オブジェクトが1つしかない場合は問題ありませんが、複数作成すると問題が発生します。詳細に説明すると、メインのゲーム ループ (インターネット上の既存のものと同じもの) があり、そのゲーム ループでは、3 秒ごとに新しいオブジェクトを作成して ArrayList に追加し、ゲーム パネルを更新します。 3 秒ごとに画面上のすべてのオブジェクトを表示します。上記のコード ブロックは機能しますが、速度が速すぎて画面が画像でいっぱいになるため、定期的に実行したいと考えています。どうすればいいですか?UI スレッドのブロックを防ぐためにバックグラウンド スレッドを使用する場合、どうすればよいですか?

前もって感謝します。

ここに私のコードブロックがあります: メインスレッド部分:

    while (running) {
        canvas = null;          
        try {
            canvas = this.surfaceHolder.lockCanvas();
            synchronized (surfaceHolder) {
                beginTime = System.currentTimeMillis();

                this.gamePanel.update();

                this.gamePanel.render(canvas);          

            }
        } finally {
            if (canvas != null) {
                surfaceHolder.unlockCanvasAndPost(canvas);
            }
        } // end finally
    }

MainGamePanel クラスの Update メソッド: public void update() {

    int random = 5 + (int) (Math.random() * (200 - 5));
    droid = new Carrier(BitmapFactory.decodeResource(getResources(),
            R.drawable.image), random, 1);
    Carriers.add(Carrier);

    for (int i = 0; i < Carriers.size(); i++) {
        Carrier CarrierTemp = Carriers.get(i);
        CarrierTemp .update();
    }
}
4

1 に答える 1

1

現在のコードに基づいて構築されたソリューションを次に示します。

これをあなたのスレッドのどこかに入れてください:

int savedtime = 0;
long lastTime;

update() メソッドで:

//Calculate time since last update:
long now = System.currentTimeMillis();
savedtime += now - lastTime;
lastTime = now;
if(savedTime > 3000){//if more than three seconds have passed:
    savedTime = 0;
    int random = 5 + (int) (Math.random() * (200 - 5));
    droid = new Carrier(BitmapFactory.decodeResource(getResources(),R.drawable.image), random, 1);
    Carriers.add(Carrier);
}
for (int i = 0; i < Carriers.size(); i++) {
    Carrier CarrierTemp = Carriers.get(i);
    CarrierTemp .update();
}
于 2011-12-22T13:36:45.203 に答える