Pentru a depana un program utilizând XNA în Silverlight5
Explicațiile sunt explicate în ordine de la crearea proiectului, așa că vă rugăm să săriți peste părțile pe care le înțelegeți.
În primul rând, creați o aplicație Silverlight. Din meniul Visual Studio, alegeți Fișier, Nou, Proiect.
Selectați Aplicația Silverlight.
În ceea ce privește găzduirea site-urilor Web, asigurați-vă că specificați site-ul pe care doriți să îl găzduiți. Paginile de testare care sunt generate automat la depanarea numai în Silverlight nu pot rula programe XNA care utilizează GPU-ul. (Cu toate acestea, acest lucru nu se aplică atunci când creați manual o pagină de testare.)
După crearea proiectului, faceți clic dreapta pe Referințe în aplicația Silverlight și selectați Adăugare referință.
Selectați "Asamblare" și "Cadru" din meniul din stânga și verificați următoarele elemente. (Nu apăsați încă butonul OK)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
Apoi, selectați "Advance" din meniul din stânga, verificați următoarele elemente și apăsați butonul OK.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Am selectat minimul necesar pentru a rula un program XNA, deci selectați asamblarea pentru referință în funcție de nevoile dvs.
Se adaugă o referință la asamblare.
În continuare, vom ajusta codul. De data aceasta, sunt descrise numai informațiile minime care arată dacă programul XNA a funcționat corect.
Din aplicația Silverlight, deschideți MainPage.xaml și adăugați următorul cod:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface este zona în care se apropie programul XNA. Când este executat, evenimentul Draw are loc în mod repetat, așa că descrieți procesul de desenare acolo. De data aceasta, voi desena doar culoarea de fundal, astfel încât să puteți vedea dacă funcționează corect.
textBlockMessage este utilizat pentru a afișa text dacă un program XNA funcționează corect sau nu. De data aceasta sunt punerea în ea pentru a confirma aceasta, asa ca nu am nevoie de ea în eliberarea reală.
Apoi deschideți fișierul "MainPage.xaml.cs". În primul rând, să sortăm piesele de utilizare. Spațiul de nume pentru aplicația Silverlight este specificat, așa că îl vom schimba pentru XNA. Atunci când îl creați efectiv, vă rugăm să îl definiți în funcție de aplicația dvs.
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;
Apoi, când porniți, doriți să afișați modul curent de amestecare și motivul pentru care nu ați putut desena în text. O scriu în constructor pentru că știu când este lansată aplicația Silverlight.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Scrieți procesul de desenare. În acest caz, dorim doar ca cadrul XNA să deseneze fundalul atunci când are loc evenimentul de desen.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Să rulăm depanarea.
Când îl rulați, acesta va fi afișat așa cum se arată în figură. RenderMode: Indisponibil nu permite redarea hardware, RenderModeReason:GPUAccelerationDisabled dezactivează randarea GPU. Aceasta este o problemă de partea serverului, deci trebuie să o activați mai întâi.
Deschideți fișierul < nume de proiect>TestPage.aspx din proiectul ASP.NET găzduit în executarea Silverlight.
Adăugați "EnableGPUAcceleration" la parametrul obiectului și setați valoarea la "true". Acest lucru oferă permisiunea de partea serverului pentru această aplicație Silverlight de a utiliza GPU-ul. (De fapt, este rezolvată prin procesarea clientului, dar din moment ce serverul este cel care scoate HTML, este o problemă de partea serverului.)
<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>
Dacă încercați să-l rulați cu acest lucru, va arăta ca figura. RenderModeReason este acum SecurityBlocked. Acest lucru se datorează faptului că desenul GPU nu este permis în mod implicit din motive de securitate. Deoarece aceasta este o problemă client, pe lângă rularea depanării, trebuie să aveți și utilizatorul să efectueze următorii pași pentru a permite GPU-ului să deseneze.
Pentru a permite randarea GPU-ului, faceți clic dreapta pe aplicația Silverlight și selectați Silverlight din meniu.
În dialogul care se deschide, selectați fila "Permisiuni", selectați site-ul corespunzător, apoi faceți clic pe butonul "Permite".
Când permisiunea este "Permite", faceți clic pe ok buton.
Dacă depanați în timp ce depanați, reîmprospătarea browserului nu are efect, deci dacă închideți browserul și îl rulați din nou, veți vedea că RenderMode devine desen hardware și desenul de fundal XNA este, de asemenea, activat. Acum puteți crea programe XNA pentru conținutul inimii dvs.