Calender

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
<< July 2017 >>

Categories

Archives

Recent Entries

Recent Comment

w closet×JUGEM

-

スポンサーサイト

一定期間更新がないため広告を表示しています

  • 2011.05.02 Monday
  • -
  • -
  • -
  • -
  • by スポンサードリンク

XNA全般

XNAコード中でWPFを使用する

最初の記事からプログラミングネタなのです。いや、決してプログラミングで全てが回るようなサイトではないのですよ?ネタが出来たのでこれが最初になってだけなのです。


今回は、デバッグやSDK(Software Development Kit...ソフトウェアの開発用ツール)の作成に使えるコードを紹介します。


タイトルの通り、XNAのコードの中でWPFを使ってみよう、というもの。ワシ自身はWPFについて詳しくないので、今回は連携のコア部分だけご紹介したいと思います。

(ほとんどプレーンテキストなので、サンプルを見ていただくのが一番かと思います。)

サンプルファイル


ひとまずサンプルファイルをば。

exeファイルだけ(XNA 3.1)
exeファイルだけ(XNA 4.0)
ソース付き(XNA 3.1 + VC# 2008 Express Edition)
ソース付き(XNA 4.0 + VS 2010 Professional Edition)


概要説明


中身は非常に簡単です。


必須事項は二つ。一つは、WPFの機能を使うために、プロジェクトにアセンブリの参照設定を追加することです。
PresentationCore, PresentationFramework, UIAutomationProvider, WindowsBase(, 4.0の場合System.Xamlも)
を参照設定に追加します。

もう一つは、エントリポイント(XNAのプロジェクト作成時はProgram.csにあります)のメソッドに[STAThread()]属性を付加することです。WinFormsやWPFの使用には必要らしい。詳しいことは自分で探してみてください。ワシもよくわかりません。


基本的にやることはこれだけ。

後は自分でSystem.Windows.Windowクラスを派生させて、それをMicrosoft.Xna.Framework.Gameの派生クラスのインスタンスとして持って、Initializeメソッドあたりで初期化+Window.Showメソッドで表示して…と実際のコーディングをするだけ。


実装が知りたい方はひとまずサンプル↑を見て確かめてください。今回のサンプルでは、WPF上のスライダーを動かしてXNA上の背景色を変更、XNA上でEnterを押したかどうかをWindowのタイトルで表示、という機能をつけています。

参考画像


XNAwithWPF


問題と注意


※ 問題1:デフォルトでは、XNAプロジェクトの「新しい項目の追加」にWindowクラスがありませんので、UserControlを作ってクラスを書き換えたり、外部から「既存項目の追加」で追加してみると楽です。参照設定も自動で行ってくれます。

※ 問題2:入力デバイスが干渉していて、XNA上での入力がWPFに反映されてしまっていたりします。Updateメソッド内でGame.IsActiveを確認して、ウィンドウが非アクティブなら入力処理を行わない、などするといいかも(IsActive、実はあんまり信用出来ないのですが(・ω・`)。

※ 問題3:全然デバッグしていませんので、不具合等あると思います。Twitter @akai_inuか、当記事のコメントまでご報告頂ければ幸いです。

※ 問題4:環境によってバグが発生する可能性があります。

※ 注意1:今回のサンプルは使用・改変に関しては自由に行って構いません。ただ、他のページへの無断での再掲載・再配布はご遠慮願います。このページへのリンクは歓迎いたします。

補足説明


ちなみにWPFではなく、WinFormsの方なら、System.Windows.Formsを参照に追加して、Game.WindowクラスにHandleプロパティがあるので、それをForm.FromHandleクラスメソッドに入れてやればXNAのウィンドウ中にメニューバーやボタンなどを追加することが出来ますよ。

  • 2010.09.26 Sunday
  • 18:42

-

スポンサーサイト

  • 2011.05.02 Monday
  • 18:42
  • -
  • -
  • -
  • -
  • by スポンサードリンク

Comment
Send Comment








   
この記事のトラックバックURL
Trackback