17

私は LibGDX を使用し、ゲーム内でカメラのみを動かします。昨日、私は自分のゲームで地面を描く方法を確立しました。Flappy Bird のクローンを作成しようとしていますが、画面上で動く地面の描画に問題があります。Actorすべてのレンダリング呼び出しで、に新しいを追加しますStageが、数回後に描画が流れなくなります。1 秒あたりのフレーム数は非常に高速です。ゲームで地面を描く別の方法はありますか?

4

3 に答える 3

19

@kabbからのソリューションの微調整:

    for(Actor actor : stage.getActors()) {
        //actor.remove();
        actor.addAction(Actions.removeActor());
    }

私の経験から、actor.remove()while iteratingstage.getActors()を呼び出すと、アクティブに反復されている配列からアクタが削除されるため、 loop が中断されます。

ConcurrentModificationException 一部の配列のようなクラスは、この種の状況に対して警告として をスローします。

そのため...回避策は、アクターに後で自分自身を削除するように指示することですAction

    actor.addAction(Actions.removeActor());

または...何らかの理由でアクターを削除するのが待ちきれない場合は、次を使用できますSnapshotArray

    SnapshotArray<Actor> actors = new SnapshotArray<Actor>(stage.getActors());
    for(Actor actor : actors) {
        actor.remove();
    }
于 2015-08-16T19:10:27.137 に答える
5

親からアクターを削除する最も簡単な方法は、そのremove()メソッドを呼び出すことです。例えば:

//Create an actor and add it to the Stage:
Actor myActor = new Actor();
stage.addActor(myActor);

//Then remove the actor:
myActor.remove();
于 2015-01-06T21:16:01.703 に答える