Para depurar un programa mediante XNA en Silverlight5

Actualización de la página :
Fecha de creación de la página :

Las explicaciones se explican en orden desde la creación del proyecto, así que omita las partes que comprenda.

En primer lugar, cree una aplicación de Silverlight. En el menú de Visual Studio, elija Archivo, Nuevo, Proyecto.

プロジェクトの新規作成

Seleccione Aplicación de Silverlight.

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

Con respecto al hospedaje de sitios Web, asegúrese de especificar el sitio que desea hospedar. Las páginas de prueba que se generan automáticamente al depurar solo en Silverlight no pueden ejecutar programas XNA que usen la GPU. (Sin embargo, esto no se aplica cuando se crea manualmente una página de prueba).

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

Una vez creado el proyecto, haga clic con el botón secundario en Referencias en la aplicación Silverlight y seleccione Agregar referencia.

参照の追加

Seleccione "Ensamblaje" y "Marco" en el menú de la izquierda y verifique los siguientes elementos. (No presione el botón OK todavía)

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

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

A continuación, seleccione "Avanzar" en el menú de la izquierda, verifique los siguientes elementos y presione el botón OK.

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

Hemos seleccionado el mínimo necesario para ejecutar un programa XNA, así que seleccione el ensamblaje al que desea hacer referencia según sus necesidades.

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

Se agrega una referencia al ensamblado.

参照一覧

A continuación, modificaremos el código. Esta vez, sólo se describe la información mínima que muestra si el programa XNA funcionó correctamente.

Desde la aplicación de Silverlight, abra MainPage.xaml y agregue el código siguiente:

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

DrawingSurface es el área en la que se basa el programa XNA. Cuando se ejecuta, el evento Draw ocurre repetidamente, así que describa el proceso de dibujo allí. Esta vez, dibujaré solo el color de fondo para que pueda ver si funciona correctamente.

textBlockMessage se utiliza para mostrar texto si un programa XNA funciona correctamente o no. Esta vez lo estoy poniendo para confirmarlo, así que no lo necesito en la versión real.

Luego abra el archivo "MainPage.xaml.cs". Primero, ordenemos las partes de uso. Se especifica el espacio de nombres para la aplicación de Silverlight, por lo que lo cambiaremos por XNA. Al crearlo, defínalo de acuerdo con su aplicación.

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ón, cuando inicie, desea mostrar el modo de fusión actual y la razón por la que no pudo dibujar en texto. Lo escribo en el constructor porque sé cuándo se inicia la aplicación Silverlight.

public MainPage()
{
  InitializeComponent();

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

Escribe el proceso de dibujo. En este caso, solo queremos que XNA Framework dibuje el fondo cuando se produzca el evento de dibujo.

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

Vamos a ejecutar la depuración.

デバッグ実行。

Cuando lo ejecute, se mostrará como se muestra en la figura. RenderMode: No disponible no permite la representación por hardware, RenderModeReason:GPUAccelerationDisabled deshabilita la representación de GPU. Este es un problema del lado del servidor, por lo que primero debe habilitarlo.

描画ができない

Abra el archivo < nombre de proyecto>TestPage.aspx del proyecto ASP.NET hospedado en la ejecución de Silverlight.

TestPage.aspx を開く

Agregue "EnableGPUAcceleration" al parámetro del objeto y establezca el valor en "true". Esto le da permiso al servidor para que esta aplicación de Silverlight use la GPU. (En realidad, se resuelve mediante el procesamiento del cliente, pero dado que es el servidor el que genera HTML, es un problema del lado 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 intenta ejecutarlo con esto, se verá como la figura. RenderModeReason ahora es SecurityBlocked. Esto se debe a que el dibujo de GPU no está permitido de forma predeterminada por razones de seguridad. Dado que se trata de un problema del cliente, además de ejecutar la depuración, también debe hacer que el usuario realice los siguientes pasos para permitir que la GPU dibuje.

RenderModeReason が SecurityBlocked に変化

Para permitir la representación de GPU, haga clic con el botón secundario en la aplicación Silverlight y elija Silverlight en el menú.

Silverlight を選択

En el cuadro de diálogo que se abre, seleccione la pestaña "Permisos", seleccione el sitio apropiado y luego haga clic en el botón "Permitir".

アクセス許可

Cuando el permiso es "Permitir", haga clic en el botón Aceptar.

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

Si está depurando durante la depuración, la actualización del explorador no surte efecto, por lo que si cierra el explorador y lo ejecuta de nuevo, verá que RenderMode se convierte en dibujo de hardware y el dibujo en segundo plano XNA también está habilitado. Ahora puede crear programas XNA al contenido de su corazón.

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