Pentru a depana un program utilizând XNA în Silverlight5

Pagina actualizată :
Data creării paginii :

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.

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.)

ホストする Web サイトの作成

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.

TestPage.aspx を開く

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.

RenderModeReason が SecurityBlocked に変化

Pentru a permite randarea GPU-ului, faceți clic dreapta pe aplicația Silverlight și selectați Silverlight din meniu.

Silverlight を選択

Î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.

ハードウェアによる描画が有効