2

チェスゲームのGUIを作成していて、ピース(画像)の動きをアニメーション化したいと思っています。スムーズなアニメーションにして、最初はゆっくり、スピードを上げてから、スローダウンして終点で停止するようにします。現在、チェス盤用のGridLayoutを備えたJFrameと、グリッド内のピースの画像があります。あまり問題なくこれを行うことは可能ですか?openGLのようなものを調べる必要がありますか(これまで使用したことはありません)?

4

1 に答える 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 に答える