Fouten in een programma opsporen met XNA in Silverlight5
De uitleg wordt uitgelegd in volgorde vanaf het maken van het project, dus sla de delen die u begrijpt over.
Maak eerst een Silverlight-toepassing. Kies in het menu Visual Studio de optie Bestand, Nieuw, Project.
Selecteer Silverlight Application.
Met betrekking tot het hosten van websites moet u de site opgeven die u wilt hosten. Testpagina's die automatisch worden gegenereerd bij foutopsporing in Silverlight alleen, kunnen geen XNA-programma's uitvoeren die de GPU gebruiken. (Dit is echter niet van toepassing wanneer u handmatig een testpagina maakt.)
Nadat het project is gemaakt, klikt u met de rechtermuisknop op Verwijzingen in de Silverlight-toepassing en selecteert u Referentie toevoegen.
Selecteer "Assembly" en "Framework" in het menu aan de linkerkant en controleer de volgende items. (Druk nog niet op de knop OK)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- Systeem.Windows.Xna
Selecteer vervolgens "Geavanceerd" in het menu aan de linkerkant, controleer de volgende items en druk op de knop OK.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
We hebben het minimum geselecteerd dat nodig is om een XNA-programma uit te voeren, dus selecteer de assemblage waarnaar u wilt verwijzen op basis van uw behoeften.
Er wordt een verwijzing naar de assemblage toegevoegd.
Vervolgens passen we de code aan. Deze keer wordt alleen de minimale informatie beschreven die laat zien of het XNA-programma correct werkte.
Open MainPage.xaml vanuit uw Silverlight-toepassing en voeg de volgende code toe:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
De DrawingSurface is het gebied waar het XNA-programma naartoe trekt. Wanneer de gebeurtenis Draw wordt uitgevoerd, komt deze herhaaldelijk voor, dus beschrijf het tekenproces daar. Deze keer teken ik alleen de achtergrondkleur, zodat u kunt zien of deze goed werkt.
textBlockMessage wordt gebruikt om tekst weer te geven of een XNA-programma goed werkt of niet. Deze keer zet ik het erin om het te bevestigen, dus ik heb het niet nodig in de daadwerkelijke release.
Open vervolgens het bestand "MainPage.xaml.cs". Laten we eerst de gebruikende delen sorteren. De naamruimte voor de Silverlight-toepassing is opgegeven, dus we zullen deze wijzigen voor XNA. Wanneer u het daadwerkelijk maakt, definieer het dan op basis van uw toepassing.
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;
Wanneer u vervolgens opstart, wilt u de huidige overvloeimodus weergeven en de reden waarom u geen tekst kon tekenen. Ik schrijf het in de constructor omdat ik weet wanneer de Silverlight-applicatie wordt gestart.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Schrijf het tekenproces. In dit geval willen we gewoon dat het XNA Framework de achtergrond tekent wanneer de tekengebeurtenis plaatsvindt.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Laten we foutopsporing uitvoeren.
Wanneer u het uitvoert, wordt het weergegeven zoals weergegeven in de afbeelding. RenderMode: Unavailable staat geen hardwarerendering toe, RenderModeReason:GPUAccelerationDisabled schakelt GPU-rendering uit. Dit is een probleem op de server, dus u moet het eerst inschakelen.
Open het < projectnaam>TestPage.aspx bestand van het ASP.NET project dat wordt gehost in de Silverlight-uitvoering.
Voeg "EnableGPUAcceleration" toe aan de parameter van het object en stel de waarde in op "true". Dit geeft de server toestemming voor deze Silverlight-toepassing om de GPU te gebruiken. (Eigenlijk wordt het opgelost door clientverwerking, maar omdat het de server is die HTML uitvoert, is het een probleem aan de serverzijde.)
<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>
Als je het hiermee probeert uit te voeren, lijkt het op de figuur. RenderModeReason is nu SecurityBlocked. Dit komt omdat GPU-tekenen om veiligheidsredenen standaard niet is toegestaan. Aangezien dit een clientprobleem is, moet u de gebruiker naast het uitvoeren van foutopsporing ook de volgende stappen laten uitvoeren om de GPU te laten tekenen.
Als u GPU-rendering wilt toestaan, klikt u met de rechtermuisknop op de Silverlight-toepassing en kiest u Silverlight in het menu.
Selecteer in het dialoogvenster dat wordt geopend het tabblad "Machtigingen", selecteer de juiste site en klik vervolgens op de knop "Toestaan".
Wanneer de toestemming "Toestaan" is, klikt u op de knop OK.
Als u foutopsporing uitvoert tijdens het debuggen, wordt het vernieuwen van de browser niet van kracht, dus als u de browser sluit en opnieuw uitvoert, zult u zien dat RenderMode hardwaretekening wordt en XNA-achtergrondtekening ook is ingeschakeld. Nu kunt u naar hartenlust XNA-programma's maken.