Para depurar um programa usando XNA em Silverlight5

Página atualizada :
Data de criação de página :

As explicações são explicadas para a criação do projeto, então, por favor, pule as partes que você entende.

Primeiro, crie um aplicativo Silverlight. No menu Visual Studio, escolha Arquivo, Novo, Projeto.

プロジェクトの新規作成

Selecione o aplicativo Silverlight.

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

Em relação à hospedagem de sites da Web, certifique-se de especificar o site que você deseja hospedar. As páginas de teste que são geradas automaticamente ao depurar somente no Silverlight não podem executar programas XNA que usam a GPU. (No entanto, isso não se aplica quando você cria manualmente uma página de teste.)

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

Depois que o projeto for criado, clique com o botão direito do mouse em Referências no aplicativo Silverlight e selecione Adicionar referência.

参照の追加

Selecione "Assembly" e "Framework" no menu à esquerda e verifique os seguintes itens. (Não pressione o botão OK ainda)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Gráficos
  • System.Windows.Xna

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

Em seguida, selecione "Avançar" no menu à esquerda, verifique os seguintes itens e pressione o botão OK.

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

Selecionamos o mínimo necessário para executar um programa XNA, então selecione o conjunto para referenciar de acordo com suas necessidades.

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

Uma referência à montagem é adicionada.

参照一覧

Em seguida, vamos ajustar o código. Desta vez, apenas as informações mínimas que mostram se o programa XNA funcionou corretamente são descritas.

A partir do seu aplicativo Silverlight, abra mainPage.xaml e adicione o seguinte código:

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

O DrawingSurface é a área que o programa XNA atrai. Quando executado, o evento Draw ocorre repetidamente, então descreva o processo de desenho lá. Desta vez, vou desenhar apenas a cor de fundo para que você possa ver se ele está funcionando corretamente.

textBlockMessage é usado para exibir texto se um programa XNA está funcionando corretamente ou não. Desta vez eu estou colocando-o para confirmar isso, então eu não preciso dele no lançamento real.

Em seguida, abra o arquivo "MainPage.xaml.cs". Primeiro, vamos resolver as peças de uso. O namespace para o aplicativo Silverlight é especificado, então vamos alterá-lo para XNA. Ao realmente criá-lo, por favor, defina de acordo com sua aplicação.

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;

Em seguida, quando você iniciar, você deseja exibir o modo de mistura atual e a razão pela qual você não pode desenhar no texto. Eu escrevo no construtor porque eu sei quando o aplicativo Silverlight é lançado.

public MainPage()
{
  InitializeComponent();

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

Escreva o processo de desenho. Neste caso, só queremos que o XNA Framework desenhe o fundo quando o evento de desenho ocorrer.

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

Vamos fazer depuração.

デバッグ実行。

Quando você executá-lo, ele será exibido como mostrado na figura. RenderMode: Indisponível não permite renderização de hardware, RenderModeReason:GPUAccelerationSables A renderização da GPU. Este é um problema do lado do servidor, então você precisa habilitá-lo primeiro.

描画ができない

Abra o arquivo < nome do projeto>TestPage.aspx do projeto ASP.NET hospedado na corrida Silverlight.

TestPage.aspx を開く

Adicione "EnableGPUAcaceleration" ao parâmetro do objeto e defina o valor como "verdadeiro". Isso dá ao lado do servidor permissão para que este aplicativo Silverlight use a GPU. (Na verdade, ele é resolvido pelo processamento do cliente, mas como é o servidor que produz HTML, é um problema do lado do 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>

Se você tentar executá-lo com isso, ele vai parecer a figura. RenderModeReason agora é SecurityBlocked. Isso ocorre porque o desenho de GPU não é permitido por padrão por razões de segurança. Como se trata de um problema do cliente, além de executar a depuração, você também precisa que o usuário execute as seguintes etapas para permitir que a GPU desenhe.

RenderModeReason が SecurityBlocked に変化

Para permitir a renderização de GPU, clique com o botão direito do mouse no aplicativo Silverlight e escolha Silverlight no menu.

Silverlight を選択

Na caixa de diálogo que abre, selecione a guia "Permissões", selecione o site apropriado e clique no botão "Permitir".

アクセス許可

Quando a permissão for "Permitir", clique no botão OK.

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

Se você estiver depurando durante a depuração, atualizar o navegador não faz efeito, então se você fechar o navegador e executá-lo novamente, verá que o RenderMode se torna desenho de hardware e o desenho em segundo plano XNA também está ativado. Agora você pode criar programas XNA para o conteúdo do seu coração.

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