Odpravljanje napak programa z uporabo XNA v silverlight5
Pojasnila so razložena z namenom izdelave projekta, zato preskočite dele, ki jih razumete.
Najprej ustvarite aplikacijo Silverlight. V meniju Visual Studio izberite Datoteka, Novo, Projekt.
Izberite Aplikacija Silverlight.
Glede gostovanja spletnih mest se prepričajte, da določite mesto, ki ga želite gostiti. Preskusne strani, ki se samodejno ustvarijo pri odpravljanju napak samo v silverlightu, ne morejo zagnati programov XNA, ki uporabljajo GPU. (Vendar to ne velja, če ročno ustvarite preskusno stran.)
Ko ustvarite projekt, z desno tipko miške kliknite Reference v aplikaciji Silverlight in izberite Dodaj sklic.
V meniju na levi izberite »Montaža« in »Okvir« in preverite naslednje elemente. (Ne pritiskajte gumba OK še)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- Sistem.Windows.Xna
Nato v meniju na levi izberite »Naprej«, preverite naslednje elemente in pritisnite gumb V redu.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Izbrali smo minimum, ki je potreben za zagon programa XNA, zato izberite montažo, da se sklicuje glede na vaše potrebe.
Doda se sklic na sestavo.
Nato bomo povile kodo. Tokrat so opisane le minimalne informacije, ki prikazujejo, ali je program XNA pravilno deloval.
V aplikaciji Silverlight odprite MainPage.xaml in dodajte to kodo:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface je področje, na ki ga črpa program XNA. Pri izvršitvi se dogodek risanje ponavlja, zato opišite postopek risbe tam. Tokrat bom narisal samo barvo ozadja, tako da boste lahko videli, če deluje pravilno.
textBlockMessage se uporablja za prikaz besedila, ali program XNA deluje pravilno ali ne. Tokrat ga dam v potrditev, tako da ga ne potrebujem v dejanski izdaji.
Nato odprite datoteko »MainPage.xaml.cs«. Najprej uredimo z uporabo delov. Določen je imenski prostor za aplikacijo Silverlight, zato ga bomo spremenili za XNA. Pri dejanski izdelavi ga določite v skladu z vašo aplikacijo.
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;
Nato, ko se zaženete, želite prikazati trenutni način mešanja in razlog, zakaj niste mogli risati v besedilu. Pišem ga v konstruktorju, ker vem, kdaj se začne aplikacija Silverlight.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Napišite postopek risbe. V tem primeru želimo le, da okvir XNA nariše ozadje, ko pride do dogodka risanja.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Zaženimo odpravljanje napak.
Ko ga zaženete, bo prikazan, kot je prikazano na sliki. RenderMode: Ni na voljo ne omogoča uprizarjanja strojne opreme, RenderModeReason:GPUAccelerationDisable disabled GPU uprizarjanje. To je težava na strani strežnika, zato jo morate najprej omogočiti.
Odprite < ime projekta>TestPage.aspx iz projekta ASP.NET, ki je gostitelj v teku Silverlight.
Parametru predmeta dodajte »EnableGPUAcceleration« in nastavite vrednost na »true«. S tem je na strani strežnika dovoljen ta silverlight program za uporabo GPU. (Pravzaprav je rešen z obdelavo odjemalca, ker pa je strežnik tisti, ki izdeluje HTML, je problem na strani strežnika.)
<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>
Če ga poskušaš voditi s tem, bo videti kot figura. RenderModeReason je zdaj Varnostnoblocked. To je zato, ker risba GPU ni privzeto dovoljena iz varnostnih razlogov. Ker gre za težavo odjemalca, morate poleg tega, da izvajate odpravljanje napak, uporabniku omogočiti, da izvede naslednje korake, da lahko GPU nariše.
Če želite omogočiti Upričanje GPU, z desno tipko miške kliknite aplikacijo Silverlight in v meniju izberite Silverlight.
V pogovornem oknu, ki se odpre, izberite zavihek »Dovoljenja«, izberite ustrezno mesto in kliknite gumb »Dovoli«.
Ko je dovoljenje »Dovoli«, kliknite gumb V redu.
Če odpravljate odpravljanje napak med odpravljanjem napak, osveževanje brskalnika ne začne učinkovati, tako da če zaprete brskalnik in ga znova zaženete, boste videli, da renderMode postane risba strojne opreme, omogočena pa je tudi risba ozadja XNA. Zdaj lahko ustvarite programe XNA po vsebini vašega srca.