Ohjelman virheenkorjaus XNA:n avulla Silverlight5:ssä
Selitykset selitetään järjestyksessä projektin luomisesta, joten ohita ymmärtämäsi osat.
Luo ensin Silverlight-sovellus. Valitse Visual Studio -valikosta Tiedosto, Uusi, Projekti.
Valitse Silverlight-sovellus.
Mitä tulee verkkosivustojen isännöintiin, muista määrittää sivusto, jota haluat isännöidä. Testisivut, jotka luodaan automaattisesti virheenkorjauksen yhteydessä pelkästään Silverlightissa, eivät voi suorittaa grafiikkasuoritinta käyttäviä XNA-ohjelmia. (Tämä ei kuitenkaan päde, kun luot testisivun manuaalisesti.)
Kun projekti on luotu, napsauta Silverlight-sovelluksessa hiiren kakkospainikkeella Viitteet-kohtaa ja valitse Lisää viite.
Valitse vasemmalla olevasta valikosta "Assembly" ja "Framework" ja tarkista seuraavat kohdat. (Älä paina vielä OK-painiketta)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
Valitse seuraavaksi vasemmalla olevasta valikosta "Advance", tarkista seuraavat kohdat ja paina OK-painiketta.
- Microsoft.Xna.Framework.Graphics.Laajennukset
- Microsoft.Xna.Framework.Math
Olemme valinneet vähimmäismäärän, joka tarvitaan XNA-ohjelman suorittamiseen, joten valitse kokoonpano, johon viitataan tarpeidesi mukaan.
Lisätään viittaus kokoonpanoon.
Seuraavaksi säädämme koodia. Tällä kertaa kuvataan vain vähimmäistiedot, jotka osoittavat, toimiko XNA-ohjelma oikein.
Avaa Silverlight-sovelluksessa MainPage.xaml ja lisää seuraava koodi:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface on alue, johon XNA-ohjelma piirtää. Kun se suoritetaan, Piirrä-tapahtuma tapahtuu toistuvasti, joten kuvaile piirustusprosessia siellä. Tällä kertaa piirrän vain taustavärin, jotta näet, toimiiko se oikein.
textBlockMessagea käytetään näyttämään tekstiä riippumatta siitä, toimiiko XNA-ohjelma oikein vai ei. Tällä kertaa laitan sen vahvistamaan sen, joten en tarvitse sitä varsinaisessa julkaisussa.
Avaa sitten "MainPage.xaml.cs" -tiedosto. Ensin lajitellaan käytetyt osat. Silverlight-sovelluksen nimiavaruus on määritetty, joten muutamme sen XNA:ksi. Kun luot sitä, määritä se hakemuksesi mukaan.
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;
Seuraavaksi, kun käynnistät, haluat näyttää nykyisen sekoitustilan ja syyn, miksi et voinut piirtää tekstiin. Kirjoitan sen konstruktoriin, koska tiedän, milloin Silverlight-sovellus käynnistetään.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Kirjoita piirustusprosessi. Tässä tapauksessa haluamme vain, että XNA-kehys piirtää taustan, kun piirustustapahtuma tapahtuu.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Suoritetaan virheenkorjaus.
Kun suoritat sen, se näkyy kuvan osoittamalla tavalla. RenderMode: Ei käytettävissä ei salli laitteiston hahmontamista, RenderModeReason:GPUAccelerationDisabled poistaa grafiikkasuorittimen hahmonnuksen käytöstä. Tämä on palvelinpuolen ongelma, joten sinun on ensin otettava se käyttöön.
Avaa <projektin nimi>testisivu.aspx tiedosto Silverlight-ajossa isännöidystä ASP.NET projektista.
Lisää "EnableGPUAcceleration" objektin parametriin ja aseta arvoksi "true". Tämä antaa palvelinpuolelle oikeuden käyttää grafiikkasuoritinta. (Itse asiassa se ratkaistaan asiakkaan käsittelyllä, mutta koska palvelin tuottaa HTML-koodia, se on palvelinpuolen ongelma.)
<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>
Jos yrität suorittaa sen tällä, se näyttää kuvalta. RenderModeReason on nyt SecurityBlocked. Tämä johtuu siitä, että grafiikkasuorittimen piirtäminen ei ole oletusarvoisesti sallittua turvallisuussyistä. Koska tämä on asiakasongelma, virheenkorjauksen suorittamisen lisäksi käyttäjän on myös suoritettava seuraavat vaiheet, jotta GPU voi piirtää.
Jos haluat sallia grafiikkasuorittimen hahmonnuksen, napsauta Silverlight-sovellusta hiiren kakkospainikkeella ja valitse valikosta Silverlight.
Valitse avautuvassa valintaikkunassa "Käyttöoikeudet" -välilehti, valitse sopiva sivusto ja napsauta sitten "Salli" -painiketta.
Kun lupa on "Salli", napsauta OK-painiketta.
Jos teet virheenkorjausta virheenkorjauksen aikana, selaimen päivittäminen ei tule voimaan, joten jos suljet selaimen ja suoritat sen uudelleen, näet, että RenderModesta tulee laitteistopiirustus ja myös XNA-taustapiirustus on käytössä. Nyt voit luoda XNA-ohjelmia sydämesi kyllyydestä.