Ladenie programu pomocou XNA v doplnku Silverlight5
Vysvetlenia sú vysvetlené v poradí od vytvorenia projektu, preto preskočte časti, ktorým rozumiete.
Najprv vytvorte aplikáciu Silverlight. V ponuke Visual Studio vyberte položku Súbor, Nový, Projekt.
Vyberte položku Aplikácia Silverlight.
Pokiaľ ide o hosťovanie webových stránok, nezabudnite zadať lokalitu, ktorú chcete hosťovať. Testovacie stránky, ktoré sa automaticky generujú pri ladení v doplnku Silverlight, nemôžu spustiť programy XNA, ktoré používajú GPU. (To však neplatí pri manuálnom vytváraní testovacej stránky.)
Po vytvorení projektu kliknite pravým tlačidlom myši na položku Referencie v aplikácii Silverlight a vyberte položku Pridať referenciu.
Vyberte "Montáž" a "Rámec" z ponuky vľavo a skontrolujte nasledujúce položky. (Zatiaľ nestláčajte tlačidlo OK)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
Ďalej vyberte "Advance" z ponuky vľavo, skontrolujte nasledujúce položky a stlačte tlačidlo OK.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Vybrali sme minimum potrebné na spustenie programu XNA, preto vyberte zostavu, ktorá bude odkazovať podľa vašich potrieb.
Pridáva sa odkaz na zostavu.
Ďalej doladíme kód. Tentokrát sú popísané iba minimálne informácie, ktoré ukazujú, či program XNA fungoval správne.
V aplikácii Silverlight otvorte súbor MainPage.xaml a pridajte nasledujúci kód:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface je oblasť, do ktorej program XNA čerpá. Po vykonaní sa udalosť Kreslenie vyskytuje opakovane, preto popíšte proces kreslenia. Tentokrát nakreslím iba farbu pozadia, aby ste videli, či funguje správne.
textBlockMessage sa používa na zobrazenie textu, či program XNA funguje správne alebo nie. Tentokrát ho vkladám, aby som to potvrdil, takže ho nepotrebujem v skutočnom vydaní.
Potom otvorte súbor "MainPage.xaml.cs". Po prvé, poďme vyriešiť použitie častí. Priestor názvov pre aplikáciu Silverlight je zadaný, takže ho zmeníme pre XNA. Keď ho skutočne vytvárate, definujte ho podľa svojej aplikácie.
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;
Ďalej pri spustení chcete zobraziť aktuálny režim miešania a dôvod, prečo ste nemohli kresliť textom. Píšem to v konštruktére, pretože viem, kedy je spustená aplikácia Silverlight.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Napíšte proces kreslenia. V tomto prípade chceme len, aby XNA Framework nakreslil pozadie, keď dôjde k udalosti kreslenia.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Poďme spustiť ladenie.
Keď ho spustíte, zobrazí sa tak, ako je to znázornené na obrázku. RenderMode: Unavailable neumožňuje hardvérové vykresľovanie, RenderModeReason:GPUAccelerationDisabled zakáže vykresľovanie GPU. Toto je problém na strane servera, takže ho musíte najskôr povoliť.
Otvorte súbor s názvom projektu <>TestPage.aspx z projektu ASP.NET hosťovaného v spustenom systéme Silverlight.
Pridajte "EnableGPUAcceleration" k parametru objektu a nastavte hodnotu na "true". To dáva strane servera povolenie pre túto aplikáciu Silverlight na používanie GPU. (V skutočnosti je to riešené klientskym spracovaním, ale keďže je to server, ktorý produkuje HTML, je to problém na strane servera.)
<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>
Ak sa ho pokúsite spustiť s týmto, bude to vyzerať ako obrázok. RenderModeReason je teraz SecurityBlocked. Je to preto, že kreslenie GPU nie je z bezpečnostných dôvodov predvolene povolené. Keďže ide o problém klienta, okrem spustenia ladenia musíte tiež nechať používateľa vykonať nasledujúce kroky, aby umožnil GPU kresliť.
Ak chcete povoliť vykresľovanie GPU, kliknite pravým tlačidlom myši na aplikáciu Silverlight a v ponuke vyberte položku Silverlight.
V dialógovom okne, ktoré sa otvorí, vyberte kartu "Povolenia", vyberte príslušnú lokalitu a potom kliknite na tlačidlo "Povoliť".
Keď je povolenie "Povoliť", kliknite na tlačidlo OK.
Ak ladíte počas ladenia, obnovenie prehliadača sa neprejaví, takže ak zatvoríte prehliadač a znova ho spustíte, uvidíte, že RenderMode sa stáva hardvérovou kresbou a je tiež povolená kresba pozadia XNA. Teraz môžete vytvárať programy XNA podľa obsahu svojho srdca.