Javaでマウスイベントのために多くの異なるオプションを処理するための標準的な方法はありますか?

StackOverflow https://stackoverflow.com/questions/1241633

  •  12-09-2019
  •  | 
  •  

質問

私はJavaでのグリッドベースのsimのゲームを開発していて、次のことを行うための標準的な方法があれば、私は思っていました。 私はゲームパネルでパネルを持ち、そしてパネルをクリックしたときに発生する可能性があり、さまざまなものがあります。部屋を構築するとき、例えば、マウスと左クリックをドラッグすると、異なるアクションを持つことになりますいくつかの段階があります。 今、私はそれを行っている方法は、構築されているものをチェックするブール値を使用することであり、それがであるどの段階ます。

このようなものを扱うの任意のより良いまたは標準的な方法はありますか?私は簡単にGoogleを持っていたが、私は前に述べたように、スタックオーバーフローの人々は、常に最新の解答までの、より良い、より適切与えます。

私はまだJavaへのかなり新しい自分を検討します。

事前に感謝します。

役に立ちましたか?

解決

あなたは戦略パターンに似たものに探してみてください。

基本的に、あなたは、ツールバー上の部屋のボタンをクリックして起動します。ツールバーが通過し、「部屋の場所」ActionListenerを使用するようにグリッドに指示します。おそらく

を聞いていた以前のアクションリスナーを削除します

部屋の場所のActionListenerは、順番に

など、ドラッグ、右/左クリックのためのロジックのすべての興味深いビットを実装します

あなたは(そして、ドア、窓、そしてトラップドアを設置する、と言う)の部屋を構築するための複数のステージを持っている場合は、有限ステートマシンのビットを:アクションリスナーは、次のステージへの制御をハンドオフのための責任を負うことになります。

だから、「部屋」ボタンをクリックすることで起動し、「場所の部屋」リスナーが追加されます。あなたが部屋になりたいエリアをドラッグして、「場所の部屋」は、 '場所のWindowsのリスナーにActionListenerを変更し、ゲームの状態を変更します。無限...あなたが終わるまでます。

1つの非常に簡単な(非コンパイル)例:

class GridPanel extends JPanel
{
    void SetMouseListener(MouseListener newListener)
    {
        for(MouseListener ml : getMouseListeners())
            removeMouseListener(ml);
        addMouseListener(newListener);
    }
}

class ControlPanel extends JPanel
{
    GridPanel gameGrid;

    void OnRectangleButtonClicked(some stuff)
    {
        gameGrid.SetMouseListener(new PlaceRoomListener(gameGrid));
    }
}

class PlaceRoomListener extends MouseAdapter
{
    GridPanel gameGrid;

    //constructor, etc

    void OnClick(mouse event)
    {
        gameGrid.doCoolStuff();
        gameGrid.SetMouseListener(new PlaceTrapDoorListener());
    }
}

//etc

さて、その非コンパイル例はさておき、Pyrolisticalはポイントを持っている:あなたは、一般的なクラスの1つのグロブにあなたのゲームモデルとグラフィックインターフェースを結合する必要はありません。あなたは、モデルがGUIから分離し、明確に定義されたインタフェースを介して、それを操作したい。

タグ(また、マウスリスナーを削除するについて行くために、おそらくより良い方法があるそしてちょうどランダムにすべてのリスナーを削除...私は申し訳ありませんが、ラッシュのビットでした)

他のヒント

あなたがゲームモデル/状態を定義し、それはあなたのマウス操作から分離しておく必要があるように、

これが鳴ります。

あなたはMVCを使用していますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top