残念ながらレベル エディター コードを失ってしまった XNA の既存のゲームがあります。以前は別の .exe として実行されていましたが、一時停止してゲーム自体でレベル エディターを実行できるように、ゲームを変更する作業を行いました。タスクに適していると思われる WPF を使用して実際にレベル編集を行いたいのですが、2 つのシステム間で情報を渡す最善の方法がわかりません。
私の XNA ゲームは WPF ウィンドウを生成し、XNA ゲームにイベントを登録して、WPF ウィンドウのボタンをクリックすると、XNA ゲームが ClickEvent を受け取り、適切に応答するようにしました。これは、XNA で直接解釈するだけで、位置以外の初期化データを必要としないオブジェクト (彫像など) を配置するのに非常に役立ちました。しかし、現在、ユーザーが WPF エディターで定義するより多くの情報 (敵の健康状態の開始など) を持つオブジェクトがあり、その情報を XNA にルーティングする最善の方法がわかりません。私は特に、最終的には、ゲーム内のオブジェクトをクリックして「インライン」で編集できるようにしたいということを心に留めようとしています (または、少なくとも、レベルエディタ)。だから本質的に、私は'
これが私がこれまで考えてきたことですが、どれも私が望んでいたほど単純ではなかったので、正しい道を進んでいるかどうか確信が持てません.
- RoutedEventArgs をオーバーライドして、イベントが WPF から発生し、XNA によって取得されたときに、すべての追加情報が既に存在するように、必要な追加のメタデータを含めます。
- これは良いアプローチのように思えますが、逆に行きたいときはまったく役に立ちません。
- また、これがどのように機能するかを誤解している可能性がありますが、「彫像」の場合には不要な一連の汎用 EventHandler コードを XNA ゲームに追加する必要があったようです。
- Button クラスをオーバーライドして、必要な追加のメタデータを添付し、sender または RoutedEventArgs.OriginalSender を介してアクセスします。
- これは簡単なアプローチの 1 つに思えますが、少し強制されているように感じます。この情報は実際にはボタンの一部ではありません。
- XNA から WPF に情報を戻すためにこれがどのように機能するかはわかりません。
- sender.Parent または RoutedEventArgs.OriginalSender.Parent を介して情報を取得します。これには、適切な WPF UI 要素にキャストする必要があります。
- これは比較的簡単に思えますが、ちょっと厄介です。これは基本的に、ComboBox などに変更/選択イベントがある場合に値が設定される、通常の C# スタイルのプロパティを多数配置することを意味します。
- これは、カスタム ボタンを作成するよりも簡単に実行できるように思えますが、まだ真剣に検討していません。
ヘルプ/指示をいただければ幸いです。関連するコード スニペットも喜んで投稿しますが、ゲームは非常に大きく、これまでの WPF 実装は非常に基本的なものであるため、何が役立つかわかりません。