Silverlightの上でXNAの描画を有効にする
上記のメソッド内では、GameTimerクラスの他にもGraphicsDevice.SetSharingMode()というメソッドを実行しています。このメソッドこそが、Silverlight/XNAにおけるもう一つの要となります。
protected override void OnNavigatedTo(NavigationEventArgs e) { SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(true); timer.Start(); } protected override void OnNavigatedFrom(NavigationEventArgs e) { timer.Stop(); SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(false); }
前回の記事でご紹介した通り、Silverlightというフレームワークは、XAMLをもとにして自動的に画面を描画します。しかしながら、GameTimerクラスを利用してXNAのゲームループを発生させる場合、画面をXNAで描画できなければ意味がありません。つまり、Silverlightによる描画機能を無効にして、XNAによる描画機能を有効にする必要があるわけです。これを実現するために用意されたメソッドがGraphicsDevice.SetSharingMode()メソッドです。
GraphicsDevice.SetSharingMode()メソッドは、XNAとSilverlightでグラフィックデバイスを共有するかどうかの設定を切り替えることのできるメソッドです。引数としてbool値を指定することが可能であり、trueを指定した場合はXNA、falseを指定した場合はSilverlightによる描画が有効となります。よって、このメソッドを実行することで、Silverlightの上で動作するXNAのゲームループにおいて、XNAによる画面の描画が可能となります。
ここまでのまとめ
このように、Silverlight/XNAの仕組みは非常に簡単です。GameTimerクラスにより、Silverlightの上でXNAのゲームループを発生させ、GraphicsDevice.SetSharingMode()メソッドにより、画面の描画をXNAで行うように切り替えているだけです。
![Silverlightの上でXNAが動作するイメージ](http://cz-cdn.shoeisha.jp/static/images/article/6244/6244_slxna_hybrid_image_s.gif)
しかしながら、より高度なアプリケーションを開発する場合、同一の画面でSilverlightとXNAを併用したいというケースもあることでしょう。次章では、Silverlight/XNAプロジェクトをもとにして、SilverlightとXNAを融合させる方法をご紹介します。