Per depurar un programa utilitzant XNA al Silverlight5

Pàgina actualitzada :
Data de creació de la pàgina :

Les explicacions s'expliquen per ordre des de la creació del projecte, així que si us plau, salteu-vos les parts que enteneu.

En primer lloc, creeu una aplicació del Silverlight. Al menú Visual Studio, trieu Fitxer, Nou, Projecte.

プロジェクトの新規作成

Seleccioneu Aplicació silverlight.

Silverlight アプリケーションを選択

Pel que fa a l'allotjament de llocs web, assegureu-vos d'especificar el lloc que voleu allotjar. Les pàgines de prova que es generen automàticament quan es depuren només al Silverlight no poden executar programes XNA que utilitzin la GPU. (Tanmateix, això no s'aplica quan creeu manualment una pàgina de prova.)

ホストする Web サイトの作成

Un cop creat el projecte, feu clic amb el botó dret a Referències a l'aplicació Silverlight i seleccioneu Afegeix referència.

参照の追加

Seleccioneu "Muntatge" i "Marc" al menú de l'esquerra i marqueu els elements següents. (Encara no premeu el botó D'acord)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics
  • System.Windows.Xna

参照するアセンブリを選択

A continuació, seleccioneu "Avança" al menú de l'esquerra, comproveu els elements següents i premeu el botó D'acord.

  • Microsoft.Xna.Framework.Graphics.Extensions
  • Microsoft.Xna.Framework.Math

Hem seleccionat el mínim necessari per executar un programa XNA, així que seleccioneu el muntatge a referència segons les vostres necessitats.

参照するアセンブリを選択

S'afegeix una referència al muntatge.

参照一覧

A continuació, modificarem el codi. Aquesta vegada, només es descriu la informació mínima que mostra si el programa XNA ha funcionat correctament.

Des de l'aplicació Silverlight, obriu MainPage.xaml i afegiu el codi següent:

<Grid x:Name="LayoutRoot" Background="White">
  <!-- 追加ここから -->
  <DrawingSurface Draw="DrawingSurface_Draw" />
  <TextBlock x:Name="textBlockMessage"/>
  <!-- 追加ここまで -->
</Grid>

El DrawingSurface és l'àrea a la qual dibuixa el programa XNA. Quan s'executa, l'esdeveniment Draw es produeix repetidament, així que descriviu-hi el procés de dibuix. Aquesta vegada, només dibuixaré el color de fons perquè pugueu veure si funciona correctament.

textBlockMessage s'utilitza per mostrar text tant si un programa XNA funciona correctament com si no. Aquesta vegada l'estic posant per confirmar-ho, així que no el necessito a la versió real.

A continuació, obriu el fitxer "MainPage.xaml.cs". En primer lloc, ordenem les parts d'ús. S'especifica l'espai de noms per a l'aplicació Silverlight, de manera que el canviarem per XNA. Quan realment el creeu, definiu-lo segons la vostra aplicació.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
//using System.Windows.Input;
//using System.Windows.Media;
//using System.Windows.Media.Animation;
//using System.Windows.Shapes;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Windows.Graphics;

A continuació, quan inicieu, voleu mostrar el mode de barreja actual i el motiu pel qual no heu pogut dibuixar en text. L'escric al constructor perquè sé quan es llança l'aplicació Silverlight.

public MainPage()
{
  InitializeComponent();

  textBlockMessage.Text
    = string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
                    GraphicsDeviceManager.Current.RenderMode.ToString(),
                    GraphicsDeviceManager.Current.RenderModeReason);
}

Escriviu el procés de dibuix. En aquest cas, només volem que el Marc XNA dibuixi el fons quan es produeixi l'esdeveniment de dibuix.

private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
  GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}

Anem a córrer la depuració.

デバッグ実行。

Quan l'executeu, es mostrarà tal com es mostra a la figura. RenderMode: No disponible no permet la representació de maquinari, RenderModeReason:GPUAccelerationDisabled inhabilita la representació de GPU. Aquest és un problema del servidor, de manera que primer heu d'habilitar-lo.

描画ができない

Obriu el fitxer < nom del projecte>TestPage.aspx des del projecte ASP.NET allotjat a l'execució del Silverlight.

TestPage.aspx を開く

Afegiu "EnableGPUAcceleration" al paràmetre d'objecte i configureu el valor a "true". Això dóna permís al costat del servidor perquè aquesta aplicació del Silverlight utilitzi la GPU. (En realitat, es resol mitjançant el processament del client, però com que és el servidor que emet HTML, és un problema del costat del servidor.)

<body>
  <form id="form1" runat="server" style="height:100%">
    <div id="silverlightControlHost">
      <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="source" value="ClientBin/DebugXna.xap"/>
        <param name="onError" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="5.0.61118.0" />
        <param name="autoUpgrade" value="true" />
        <!-- 追加ここから -->
        <param name="EnableGPUAcceleration" value="true" />
        <!-- 追加ここまで -->
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Microsoft Silverlight の取得" style="border-style:none"/>
        </a>
      </object>
      <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
    </div>
  </form>
</body>

Si intenteu executar-lo amb això, semblarà la figura. RenderModeReason ara és SecurityBlocked. Això es deu al fet que el dibuix de la GPU no està permès per defecte per motius de seguretat. Com que es tracta d'un problema de client, a més d'executar la depuració, també heu de fer que l'usuari realitzi els passos següents per permetre que la GPU dibuixi.

RenderModeReason が SecurityBlocked に変化

Per permetre la representació de la GPU, feu clic amb el botó dret a l'aplicació Silverlight i trieu Silverlight al menú.

Silverlight を選択

Al diàleg que s'obre, seleccioneu la pestanya "Permisos", seleccioneu el lloc adequat i, a continuació, feu clic al botó "Permet".

アクセス許可

Quan el permís sigui "Permet", feu clic al botó D'acord.

アクセス許可が「許可」に代わる

Si esteu depurant mentre esteu depurant, actualitzar el navegador no té efecte, de manera que si tanqueu el navegador i l'executeu de nou, veureu que RenderMode es converteix en dibuix de maquinari i el dibuix de fons XNA també està habilitat. Ara podeu crear programes XNA al contingut del vostre cor.

ハードウェアによる描画が有効