2016-04-26 10 views
0

私はあなたがスクリーンの端に達するゲームをデザインしています。画面は、最初のゼルダのゲームと同じマップの新しいパネルに移動します。どのメソッドがより効率的で効果的か、repaint()を使用してスレッドを実行しているか、javax.swing.Timerを使用してsuper.paintComponetをうまく呼び出すことができますか?インタラクティブな背景

+0

私の意見では、どちらも良い解決策ではありません。 'super.paintComponent()'ではなく、 'actionPerformed'の中で' repaint() 'を呼び出す' javax.swing.Timer'を使用してください。しかし、タイマーは 'paintComponent'メソッドの中で開始されるべきではありません。 –

+0

ありがとう、私は最良の方法で研究をしてきましたが、人々が育てたいくつかの方法がありました。 –

+0

しかし、正確にタイマーは何ですか?あなたは、パネルの移行のアニメーションをしようとしていますか?私があなたが達成しようとしていることが完全にはっきりしていないので、特定のヘルプのために[mcve]を投稿することを検討してください。 –

答えて

1

通常、単純なアニメーションの場合は、javax.swing.Timerを使用できますが、もっと複雑なゲームになっているようです。 swing.Timerを引き続き使用し、コードの実行が十分速くない場合は、コンポーネントのペイントに影響を与えてUIが無応答になることがあります。

ワーカースレッドを使用してThread.sleep(delay)を呼び出すことによって、ゲームループを構築し、必要なフレームレートに従ってレンダリングできます。イベントディスパッチスレッドで実行しないように注意してください。そうしないと、UIも無応答になります。