0

これは、異なるアニメーションを同時に作成することに関するアルゴリズム/データ構造の問題です。たとえば、ボールは 1 ミリ秒に 1 ピクセル、弾丸は 1 ミリ秒に 5 ピクセル、人間は 20 ミリ秒に 1 ピクセル移動します。そして、それらが何百も一緒にあると考えてください。すべてのアニメーションをまとめて、1 回の関数呼び出しで移動する必要があるものを移動し、アニメーションが完了したものを削除する最良の方法は何ですか? それぞれにスレッドを作成したくありません。私がやりたいことは、すべてのアイテムを移動し、オブジェクトを移動する必要があるまでスリープする 1 つのスレッドを作成することです。

注: 私は Java/Swing を使用して、JPanel でオブジェクトと画像を印刷しています。

4

1 に答える 1

1

私は最近、Pythonで似たようなことをしました。これが最善の方法かどうかはわかりませんが、これが私がやったことです。

Event次のパブリック インターフェイスを使用して抽象クラスを作成します。

  • tick- 最後のティックから経過した時間を計算します。その時間帯に比例した作業を行います。これは、滑らかな動きの錯覚を作成するために頻繁に呼び出す必要があります。おそらく1秒間に16回程度です。
  • isDone- イベントの発生が終了すると true を返します。

終了するのに 1 フレーム以上かかるものについては、Event のサブクラスを作成します。回転、拡大縮小、色の変更などTweenEvent。画面のある部分から別の部分に画像を移動する場合は、Event のサブクラスを作成できます。各tickの間に、元の位置から離れた位置でイメージを再描画し、さらに目的の位置に向かって再描画します。

次のように、多くのイベントを同時に実行できます。

Array<Event> events = new Array<Event>();

//add a bunch of TweenEvents here - one for a bullet, one for a ball, etc.

while(True){
    Sleep(1/16);
    for(Event e in events){
        e.tick();
        if (e.isDone()){events.remove(e);}
    }
}
于 2012-11-30T21:30:50.417 に答える