チェスゲームのGUIを作成していて、ピース(画像)の動きをアニメーション化したいと思っています。スムーズなアニメーションにして、最初はゆっくり、スピードを上げてから、スローダウンして終点で停止するようにします。現在、チェス盤用のGridLayoutを備えたJFrameと、グリッド内のピースの画像があります。あまり問題なくこれを行うことは可能ですか?openGLのようなものを調べる必要がありますか(これまで使用したことはありません)?
質問する
1356 次
1 に答える
3
基本的なSwingアニメーションがこれをうまく処理するため、これにはOpenGLは必要ありません。JLabelを保持するチェスの駒をGridLayoutを使用するコンテナからガラス板に持ち上げ、ガラス板上でアニメーション化して目的のコンテナ上に移動し、ガラス板から目的のコンテナに配置します(おそらく、GridLayoutはJPanelsを保持します。したがって、宛先はJPanelになります)。スイングタイマーは、アニメーションループを実行するためにうまく機能するはずです。
より正確には、ロジックは次のようになります。
- ユーザーがチェスの駒をクリックすると、この駒の参照が変数に格納されます
- ユーザーが目的地をクリックします。
- チェスロジックエンジンは、これがユーザーの実際のターンであり、これが有効な動きであることを確認するためにチェックします
- アニメーションの実行中にユーザーが移動する機能を無効にします(MouseListenerをオフにします)
- 現在のJPanelコンテナからピースJLabelを削除し、ガラス板の同じ画面位置に配置します
- Swing Timerを開始して、現在のコンテナの場所から新しい場所に移動してアニメーションを実行します。
- タイマーは、ピースをAからBに移動するときにsetLocationを呼び出します。
- タイマーが完了したら、ガラス板からピースを取り出し、新しい容器に入れます
- 次のプレーヤーが移動できるようにチェスエンジンにOKを伝えます。
以上のことをすべて述べましたが、私自身の好みは、ユーザーがJLabelをソースから宛先にドラッグし、ドラッグをアニメーションにすることです。このサイトのどこかでこれを行う方法を示すコードがあります。私にとって、これはユーザーがチェスの駒を動かすためのより自然な方法です。ちょっと待って、リンクを検索します。
リンクはここにあります:does-adding-a-jlabel-to-a-jpanel-hide-the-jpanel
于 2012-05-24T02:21:09.093 に答える