Para depurar um programa usando XNA em Silverlight5
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.
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.)
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.
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.
Para permitir a renderização de GPU, clique com o botão direito do mouse no aplicativo Silverlight e escolha Silverlight no menu.
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.