Program hibakeresése XNA-val a Silverlight5-ben

Oldal frissítve :
Oldal létrehozásának dátuma :

A magyarázatokat a projekt létrehozásától kezdve sorrendben magyarázzák, ezért kérjük, hagyja ki a megértett részeket.

Először hozzon létre egy Silverlight-alkalmazást. A Visual Studio menüjében válassza a Fájl, Új, Projekt lehetőséget.

プロジェクトの新規作成

Válassza a Silverlight alkalmazás lehetőséget.

Silverlight アプリケーションを選択

A webhelyek üzemeltetésével kapcsolatban mindenképpen adja meg a üzemeltetni kívánt webhelyet. A Silverlightban történő hibakeresés során automatikusan generált tesztoldalak önmagukban nem futtathatók GPU-t használó XNA-programok. (Ez azonban nem vonatkozik a tesztoldal manuális létrehozására.)

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

A projekt létrehozása után kattintson a jobb gombbal a Hivatkozások elemre a Silverlight alkalmazásban, és válassza a Hivatkozás hozzáadása lehetőséget.

参照の追加

Válassza az "Összeszerelés" és a "Keretrendszer" lehetőséget a bal oldali menüből, és ellenőrizze a következő elemeket. (Még ne nyomja meg az OK gombot)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics
  • Rendszer.Windows.Xna

参照するアセンブリを選択

Ezután válassza a bal oldali menüből az "Advance" lehetőséget, ellenőrizze a következő elemeket, és nyomja meg az OK gombot.

  • Microsoft.Xna.Framework.Graphics.Extensions
  • Microsoft.Xna.Framework.Math

Kiválasztottuk az XNA program futtatásához minimálisan szükséges összeget, ezért válassza ki az igényeinek megfelelően a referenciálni kívánt szerelvényt.

参照するアセンブリを選択

A szöveg kiegészül a szerelvényre való hivatkozással.

参照一覧

Ezután módosítjuk a kódot. Ezúttal csak azokat a minimális információkat írják le, amelyek azt mutatják, hogy az XNA program megfelelően működött-e.

A Silverlight alkalmazásban nyissa meg a MainPage.xaml fájlt, és adja hozzá a következő kódot:

<Grid x:Name="LayoutRoot" Background="White">
  <!-- 追加ここから -->
  <DrawingSurface Draw="DrawingSurface_Draw" />
  <TextBlock x:Name="textBlockMessage"/>
  <!-- 追加ここまで -->
</Grid>

A DrawingSurface az a terület, amelyre az XNA program rajzol. Végrehajtáskor a Rajzolás esemény többször is megtörténik, ezért írja le ott a rajzolási folyamatot. Ezúttal csak a háttérszínt rajzolom meg, hogy lássa, megfelelően működik-e.

A textBlockMessage a szöveg megjelenítésére szolgál, függetlenül attól, hogy egy XNA program megfelelően működik-e vagy sem. Ezúttal azért teszem be, hogy megerősítsem, így nincs rá szükségem a tényleges kiadásban.

Ezután nyissa meg a "MainPage.xaml.cs" fájlt. Először is rendezzük a használt alkatrészeket. A Silverlight alkalmazás névtere meg van adva, ezért az XNA-ra módosítjuk. Amikor ténylegesen létrehozza, kérjük, határozza meg az alkalmazásnak megfelelően.

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;

Ezután az indításkor meg szeretné jeleníteni az aktuális keverési módot és azt, hogy miért nem tudott szövegesen rajzolni. Azért írom a konstruktorba, mert tudom, mikor indul el a Silverlight alkalmazás.

public MainPage()
{
  InitializeComponent();

  textBlockMessage.Text
    = string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
                    GraphicsDeviceManager.Current.RenderMode.ToString(),
                    GraphicsDeviceManager.Current.RenderModeReason);
}

Írja meg a rajzolási folyamatot. Ebben az esetben csak azt szeretnénk, hogy az XNA keretrendszer megrajzolja a hátteret, amikor a rajzolási esemény bekövetkezik.

private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
  GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}

Futtassuk a hibakeresést.

デバッグ実行。

Amikor futtatja, az ábrán látható módon jelenik meg. RenderMode: Az Unavailable nem engedélyezi a hardveres renderelést, a RenderModeReason:GPUAccelerationDisabled letiltja a GPU-renderelést. Ez egy kiszolgálóoldali probléma, ezért először engedélyeznie kell.

描画ができない

Nyissa meg a < projektnevét>TestPage.aspx fájlt a Silverlight-futtatásban üzemeltetett ASP.NET projektből.

TestPage.aspx を開く

Adja hozzá az "EnableGPUAcceleration" elemet az objektum paraméteréhez, és állítsa az értéket "true" értékre. Ez engedélyt ad a kiszolgálóoldali alkalmazásnak a GPU használatára. (Valójában kliens feldolgozással oldják meg, de mivel a szerver adja ki a HTML-t, ez egy szerveroldali probléma.)

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

Ha ezzel próbálja futtatni, akkor úgy fog kinézni, mint az ábra. A RenderModeReason mostantól SecurityBlocked. Ennek az az oka, hogy a GPU-rajzolás biztonsági okokból alapértelmezés szerint nem engedélyezett. Mivel ez egy ügyfélprobléma, a hibakeresés futtatása mellett a felhasználónak a következő lépéseket is végre kell hajtania, hogy a GPU rajzolhasson.

RenderModeReason が SecurityBlocked に変化

A GPU-renderelés engedélyezéséhez kattintson a jobb gombbal a Silverlight alkalmazásra, és válassza a Silverlight lehetőséget a menüből.

Silverlight を選択

A megnyíló párbeszédpanelen válassza ki az "Engedélyek" fület, válassza ki a megfelelő webhelyet, majd kattintson az "Engedélyezés" gombra.

アクセス許可

Ha az engedély "Engedélyezés", kattintson az OK gombra.

アクセス許可が「許可」に代わる

Ha hibakeresés közben hibakeresést végez, a böngésző frissítése nem lép érvénybe, így ha bezárja a böngészőt, és újra futtatja, látni fogja, hogy a RenderMode hardveres rajzzá válik, és az XNA háttérrajz is engedélyezve van. Most már szíve szerint hozhat létre XNA programokat.

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