2017-03-19 5 views
2

私は自分のゲームのメニューシステムを作成しており、作成時にクリックイベントで実行する一連の命令(または関数)を渡すことができるようにボタンを作成しようとしています。Monogame/XNAクリック時にリスナーまたは関数を入力しますか?

Iは、Screenenumパラメータを受け取るChangeScreenと呼ばれる機能を有し、そしてIは次のように、イベントをリッスンボタンにこの機能を通過できるようにしたいので、(擬似コード着信):

menuButtons.Add(new MenuButton(ChangeScreen(Screen.Settings), texture, hovertexture, position));

次に、menuButtonsを列挙し、各ボタンのUpdateおよびDrawメソッドを呼び出します。私はこのアイデアが大好きですが、具体的に各ボタンをチェックするif文を書くのではなく、MenuButtonにそれ自身の変数を割り当てるよりも比較的効率的です。

これは私が思っている唯一の使用例ではありません。それが可能であるならば、私のような方法で渡すことができるのが大好きだ:

menuButtons.Add(new MenuButton(new Method() { variableToSet = 1; }, texture, hovertexture, position));

私はActionを使用してみましたが、私はちょうどこれを正しくやって行く方法を理解していません。すべて可能ですか、それとも同様の解決策がありますか?

+0

UI要素が押されるたびに何らかのコールバックを作成する必要がありますか? –

+0

はい、私は、MenuButtonの作成で全く新しい機能を渡すことができるようにしたいと考えています。 – zuddsy

+0

あなたが求めていることは本当にはっきりしていないと思います。たぶんあなたの質問を書き換えようとすると、もっと答えが出るかもしれません。 – craftworkgames

答えて

0

私は、私が得ることができるほど近い解決策を見つけました。私MenuButtonオブジェクトで

私はUpdate()にクリックをチェックしたい場合は、私が

public delegate void ButtonEventHandler(object sender, EventArgs e); 
public event ButtonEventHandler onClick; 

を持っている:

if (onClick != null && onClick.GetInvocationList().Length > 0) 
{ 
    OnClick(new EventArgs()); 
} 

その後、私はそれぞれのボタンを作成するとき、それは次のようになります。

MenuButton button = new MenuButton(); 
button.onClick += MethodToExecute; 
menuButtons.Add(button); 

MethodToExecute(object sender, EventArgs e)は何らかのアクション私はボタンが欲しいです。

次に、私は単にmenuButtonsをループして、必要に応じてそれぞれを更新して描画します。

関連する問題