Så här felsöker du ett program med XNA i Silverlight5
Förklaringarna förklaras i ordning från skapandet av projektet, så hoppa över de delar du förstår.
Skapa först ett Silverlight-program. På Visual Studio-menyn väljer du Arkiv, Ny, Projekt.
Välj Silverlight-program.
När det gäller värdwebbplatser måste du ange den webbplats som du vill vara värd för. Testsidor som genereras automatiskt vid felsökning enbart i Silverlight kan inte köra XNA-program som använder GPU:n. (Detta gäller dock inte när du skapar en testsida manuellt.)
När projektet har skapats högerklickar du på Referenser i Silverlight-programmet och väljer Lägg till referens.
Välj "Assembly" och "Framework" från menyn till vänster och kontrollera följande objekt. (Tryck inte på OK-knappen ännu)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
Välj sedan "Advance" från menyn till vänster, kontrollera följande objekt och tryck på OK-knappen.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Vi har valt det minsta som krävs för att köra ett XNA-program, så välj den enhet som ska refereras enligt dina behov.
En hänvisning till sammansättningen läggs till.
Därefter justerar vi koden. Den här gången beskrivs endast den minsta informationen som visar om XNA-programmet fungerade korrekt.
Öppna MainPage.xaml från Silverlight-programmet och lägg till följande kod:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface är det område som XNA-programmet drar till. När den körs inträffar Draw-händelsen upprepade gånger, så beskriv ritningsprocessen där. Den här gången ritar jag bara bakgrundsfärgen så att du kan se om den fungerar som den ska.
textBlockMessage används för att visa text oavsett om ett XNA-program fungerar korrekt eller inte. Den här gången lägger jag in den för att bekräfta den, så jag behöver den inte i själva utgåvan.
Öppna sedan filen "MainPage.xaml.cs". Låt oss först sortera ut de använda delarna. Namnområdet för Silverlight-programmet anges, så vi ändrar det för XNA. När du faktiskt skapar den, definiera den enligt din ansökan.
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;
När du startar vill du sedan visa det aktuella blandningsläget och anledningen till att du inte kunde rita in text. Jag skriver det i konstruktorn eftersom jag vet när Silverlight-applikationen startas.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Skriv ritningsprocessen. I det här fallet vill vi bara att XNA Framework ska rita bakgrunden när ritningshändelsen inträffar.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Låt oss köra felsökning.
När du kör den visas den som visas i figuren. RenderMode: Otillgänglig tillåter inte maskinvarurendering, RenderModeReason:GPUAccelerationDisabled inaktiverar GPU-rendering. Det här är ett problem på serversidan, så du måste aktivera det först.
Öppna filen < projektnamn>TestPage.aspx från det ASP.NET projektet som finns i Silverlight-körningen.
Lägg till "EnableGPUAcceleration" till parametern för objektet och ställ in värdet till "true". Detta ger serversidan behörighet för det här Silverlight-programmet att använda GPU: n. (Egentligen löses det genom klientbehandling, men eftersom det är servern som matar ut HTML är det ett problem på serversidan.)
<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>
Om du försöker köra det med det här kommer det att se ut som figuren. RenderModeReason är nu SecurityBlocked. Detta beror på att GPU-ritning inte tillåts som standard av säkerhetsskäl. Eftersom detta är ett klientproblem måste du, förutom att köra felsökning, också låta användaren utföra följande steg för att låta GPU: n rita.
Om du vill tillåta GPU-rendering högerklickar du på Silverlight-programmet och väljer Silverlight på menyn.
I dialogrutan som öppnas väljer du fliken "Behörigheter", väljer lämplig webbplats och klickar sedan på "Tillåt" -knappen.
När behörigheten är "Tillåt" klickar du på OK-knappen.
Om du felsöker medan du felsöker träder uppdatering av webbläsaren inte i kraft, så om du stänger webbläsaren och kör den igen ser du att RenderMode blir maskinvaruritning och XNA-bakgrundsritning är också aktiverad. Nu kan du skapa XNA-program till ditt hjärta.