0

次の例 (ここで説明) を使用して、スプライト シートをアニメーション化します。

例から私は私のオブジェクトを書きました:

public class Sprite {
private int x, y;
private int width, height;
private Bitmap b;
MainGamePanel ov;
int currentFrame = 0;

public Sprite(MainGamePanel mainGamePanel, Bitmap blob) {
    this.ov = mainGamePanel;
    this.b = blob;
    // 1x12
    height = b.getHeight();
    width = b.getWidth()/12;
    x = y = 50;     
}

private void update(int dist) {              
    currentFrame = ++currentFrame % 12;
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    //return _b;
}

public void draw(int shift, Canvas canvas, int dist) {
    update(dist);
    int srcX = currentFrame * width;
    Rect  src = new Rect(srcX, 0, srcX+width, height);
    Rect  dst = new Rect(x, y+shift, x+width, y+height+shift);
    canvas.drawBitmap(b, src, dst, null);
}

ここでは、100 ミリ秒ごとに画像 (ビットマップ) から別の部分を取り出して表示します。

1 -> 2 -> 3 -> 4 -> ... -> 12

だから私の生き物は翼で飛んで動きます。

オブジェクトを1 つだけ表示する場合は問題ないように見えますが、ループで 20 のクリーチャーを実行しようとすると、次のようになります。

  Bitmap blob = BitmapFactory.decodeResource(getResources(), R.drawable.sprite3);

  for(int i=0; i<20; i++){
      spriteList.add(new Sprite(this, blob));
  }


....

for(int i=0; i<spriteList.size(); i++){
  sprite = spriteList.get(0);
  sprite.draw(canvas, dist);
}

描画されたオブジェクトの数に応じて、オブジェクトが遅くなり始めます。

のせいだと思いますThread.sleep(100);

パフォーマンスの問題は見られません。

各オブジェクトがスリープすると、すべてのオブジェクトが一時停止するように聞こえます。

20 個のオブジェクトの場合、このスリープは 2 秒になります。

確かに私は次のような回避策を使用します:

int sleep = 100/spriteList.size();
Thread.sleep(sleep);

しかし、コードは乱雑に見えます。

誰かがそれを修正する方法を手伝ってくれますか?

ここにsprite3画像があります:ここに画像の説明を入力

[編集]

たぶん、各オブジェクトを別々のスレッドで作成する必要がありますか?

4

1 に答える 1