オブジェクトとタイマーの移動
このコンテキストでは、オブジェクトが画面の下部からランダムに表示され、特定の高さまで上昇するようにします。 、その後、ゲームのフルーツ忍者と同様の方法で下に戻ります。ただし、遅延がずらされていないため、すべてのオブジェクトが同時に開始されるという問題が発生します。
解決策:
この問題を解決するには、次のことができます。各オブジェクトに固有の遅延が発生します。以下は、減少する遅延カウンターに基づいて動きを実行する ActionListener を備えた Shape クラスを使用する可能なアプローチの説明です。
1.遅延と移動ロジックを備えたシェイプ クラス:
<code class="java">class Shape { private int randomDelayedStart; private boolean draw = false; private boolean down = false; private int y = D_HEIGHT; // Initial position at the bottom of the screen public void decreaseDelay() { if (randomDelayedStart <= 0) { draw = true; } else { randomDelayedStart -= 1; } } public void move() { if (draw) { if (y <= 50) { down = true; } if (down) { y += INCREMENT; } else { y -= INCREMENT; } } } }</code>
2.各シェイプのランダムな初期化:
各 Shape オブジェクトを作成するときに、遅延値をランダムに割り当てることができます:
<code class="java">for (int i = 0; i < 20; i++) { int randXLoc = random.nextInt(D_WIDTH); int randomDelayedStart = random.nextInt(100); Shape shape = new Shape(randXLoc, randomDelayedStart); list.add(shape); }</code>
3。シェイプの動きをトリガーする ActionListener:
単一の Timer で、ActionListener はすべてのシェイプを反復処理し、遅延カウンターをデクリメントし、その移動メソッドを呼び出すことができます。 :
<code class="java">ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent e) { for (Shape s : shapes) { s.decreaseDelay(); s.move(); repaint(); } } };</code>
4.タイマーの開始:
すべてのシェイプを初期化した後、タイマーを開始して連続的な動きを開始します:
<code class="java">timer.start();</code>
このアプローチにより、シェイプごとに独立した遅延と動きが可能になり、彼らは千鳥状に現れて動き、Fruit Ninja の望ましい動作に似ています。
以上がJava でオブジェクトの時間差移動を実現する方法: フルーツ忍者効果のためにタイマーと遅延を利用する?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。