SilverlightとXNAを融合させる
まずは、SilverlightとXNAを同一の画面で融合させる方法を動画でご紹介します。この動画では、Silverlight/XNAプロジェクトを新規に作成し、GamePage内で(「GamePage.xaml」と「GamePage.xaml.cs」に対して)SilverlightとXNAを融合させる処理を追記しています。
上記の動画から見て取れるように、少ないコード量でSilverlightとXNAを融合させることが可能となっています。それでは実施に、上記の動画の手順に沿って、SilverlightとXNAを融合させる手順を解説します。
SilverlightでUIを構築する
まず、従来のSilverlightアプリケーション開発と同様に、XAMLに対してUIコントロールを配置します。上記の動画では、「GamePage.xaml」に対して適当なUIを構築するため、「MainPage.xaml」のUIを複製しています。このようにして変更した「GamePage.xaml」の内容を以下に掲載します。
<phone:PhoneApplicationPage
x:Class="SlXnaApp1.GamePage"
…中略…>
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="マイ アプリケーション" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="ページ名" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Button Height="100" Content="ゲームのページに変更" />
</Grid>
</Grid>
</phone:PhoneApplicationPage>
ただし、上記の手順を実施しただけでは、UIは自動的に描画されません。なぜなら、前章で紹介したGraphicsDevice.SetSharingMode()メソッドにより、Silverlightによる描画が無効(XNAによる描画が有効)となっているからです。
それでは、Silverlight/XNAを利用している画面において、SilverlightのUIを画面に表示するためには、どのようにすればよいのでしょうか? 答えは至ってシンプルで、SilverlightのUIをXNAで描画すればよいのです。Windows Phone SDK 7.1には、SilverlightのUIをXNAで描画するためのユーティリティとして、UIElementRendererクラスが用意されています。
