1

JPanelユーザーが適切なキーを押す (そして押し続ける) と、キャラクターが左右に動くアニメーションを書き込もうとしています。

さて、私は同時実行に慣れていないので、質問したいのですが、アニメーションを処理するコード (つまり、キーが保持されている限りキャラクターを移動して再描画するメソッド) は、ワーカー スレッドまたはイベント ディスパッチ スレッドで実行する必要がありますか?

の並行性に関するチュートリアルを読みましたswingが、コンポーネントを変更するもの (この場合は painting JPanel) はイベント処理スレッドにあるようですが、一方で、キーがそうである限り、他のすべてのイベントをフリーズします。開催されますよね?

たとえば、私がこれを正しく理解していれば、ユーザーは左に行くキーを押している間はゲームを一時停止できません。では、どのアプローチが正しいのでしょうか?またその理由は? それとも、そのようなアニメーションを作成するためのまったく異なる方法があるのでしょうか?

前もって感謝します!

4

1 に答える 1

1

すべての図面の塗装は、EDT スレッドで行う必要があります。他の Thread では決して使用しないでください。ペイントには SwingUtilities.invokeLater() .. を使用します。ワーカー スレッドでキャラクターの次の位置がどうなるかなどの計算を行うことができます。EDT で Swing クラスを作成して使用している場合、応答しなくなることはありません。計算が長すぎないことを確認してください。アニメーションの場合、キャラクターの次の位置を見つけるたびに SwingUtilties.invokeLater を呼び出して、UI の変更を更新します。

于 2013-07-04T15:59:50.830 に答える