So debuggen Sie ein Programm mithilfe von XNA in Silverlight5

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Die Erklärungen werden in der Reihenfolge von der Erstellung des Projekts erklärt, also überspringen Sie bitte die Teile, die Sie verstehen.

Erstellen Sie zunächst eine Silverlight-Anwendung. Wählen Sie im Menü Visual Studio Datei, Neu, Projekt aus.

プロジェクトの新規作成

Wählen Sie Silverlight-Anwendung aus.

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

Geben Sie beim Hosten von Websites unbedingt die Website an, die Sie hosten möchten. Testseiten, die beim Debuggen in Silverlight automatisch generiert werden, können keine XNA-Programme ausführen, die die GPU verwenden. (Dies gilt jedoch nicht, wenn Sie eine Testseite manuell erstellen.)

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

Nachdem das Projekt erstellt wurde, klicken Sie in der Silverlight-Anwendung mit der rechten Maustaste auf Verweise, und wählen Sie Verweis hinzufügen aus.

参照の追加

Wählen Sie "Assembly" und "Framework" aus dem Menü auf der linken Seite und überprüfen Sie die folgenden Punkte. (Drücken Sie noch nicht die OK-Taste)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics
  • System.Windows.Xna

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

Wählen Sie anschließend "Advance" aus dem Menü auf der linken Seite, überprüfen Sie die folgenden Punkte und drücken Sie die OK-Taste.

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

Wir haben das Minimum ausgewählt, das zum Ausführen eines XNA-Programms erforderlich ist, also wählen Sie die zu referenzierende Assembly entsprechend Ihren Anforderungen aus.

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

Ein Verweis auf die Assembly wird hinzugefügt.

参照一覧

Als Nächstes optimieren wir den Code. Diesmal wird nur die minimale Information beschrieben, die zeigt, ob das XNA-Programm korrekt funktioniert hat.

Öffnen Sie in der Silverlight-Anwendung MainPage.xaml, und fügen Sie den folgenden Code hinzu:

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

Die DrawingSurface ist der Bereich, auf den das XNA-Programm zeichnet. Wenn das Draw-Ereignis ausgeführt wird, tritt es wiederholt auf, beschreiben Sie daher den Zeichenprozess dort. Dieses Mal werde ich nur die Hintergrundfarbe zeichnen, damit Sie sehen können, ob es richtig funktioniert.

textBlockMessage wird verwendet, um Text anzuzeigen, unabhängig davon, ob ein XNA-Programm ordnungsgemäß funktioniert oder nicht. Dieses Mal füge ich es ein, um es zu bestätigen, also brauche ich es nicht in der eigentlichen Version.

Öffnen Sie dann die Datei "MainPage.xaml.cs". Lassen Sie uns zunächst die verwendenden Teile aussortieren. Der Namespace für die Silverlight-Anwendung wird angegeben, daher wird er für XNA geändert. Wenn Sie es tatsächlich erstellen, definieren Sie es bitte entsprechend Ihrer Anwendung.

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;

Als Nächstes möchten Sie beim Starten den aktuellen Füllmodus und den Grund anzeigen, warum Sie keinen Text zeichnen konnten. Ich schreibe es in den Konstruktor, weil ich weiß, wann die Silverlight-Anwendung gestartet wird.

public MainPage()
{
  InitializeComponent();

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

Schreiben Sie den Zeichenprozess. In diesem Fall möchten wir nur, dass das XNA Framework den Hintergrund zeichnet, wenn das Zeichnungsereignis eintritt.

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

Lassen Sie uns das Debuggen ausführen.

デバッグ実行。

Wenn Sie es ausführen, wird es wie in der Abbildung gezeigt angezeigt. RenderMode: Nicht verfügbar lässt kein Hardwarerendering zu, RenderModeReason:GPUAccelerationDisabled deaktiviert das GPU-Rendering. Dies ist ein serverseitiges Problem, daher müssen Sie es zuerst aktivieren.

描画ができない

Öffnen Sie die Datei < Projektname>TestPage.aspx aus dem ASP.NET Projekt, das in der Silverlight-Ausführung gehostet wird.

TestPage.aspx を開く

Fügen Sie "EnableGPUAcceleration" zum Parameter des Objekts hinzu und setzen Sie den Wert auf "true". Dadurch erhält die serverseitige Berechtigung für diese Silverlight-Anwendung, die GPU zu verwenden. (Eigentlich wird es durch Clientverarbeitung gelöst, aber da es der Server ist, der HTML ausgibt, ist es ein serverseitiges Problem.)

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

Wenn Sie versuchen, es damit auszuführen, wird es wie die Abbildung aussehen. RenderModeReason ist jetzt SecurityBlocked. Dies liegt daran, dass GPU-Zeichnungen aus Sicherheitsgründen standardmäßig nicht zulässig sind. Da es sich hierbei um ein Clientproblem handelt, muss der Benutzer neben dem Debuggen auch die folgenden Schritte ausführen, damit die GPU zeichnen kann.

RenderModeReason が SecurityBlocked に変化

Um GPU-Rendering zuzulassen, klicken Sie mit der rechten Maustaste auf die Silverlight-Anwendung, und wählen Sie Silverlight aus dem Menü aus.

Silverlight を選択

Wählen Sie im sich öffnenden Dialogfeld die Registerkarte "Berechtigungen", wählen Sie die entsprechende Site aus und klicken Sie dann auf die Schaltfläche "Zulassen".

アクセス許可

Wenn die Berechtigung "Zulassen" lautet, klicken Sie auf die Schaltfläche OK.

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

Wenn Sie während des Debuggens debuggen, wird das Aktualisieren des Browsers nicht wirksam, wenn Sie also den Browser schließen und erneut ausführen, werden Sie sehen, dass der RenderModus zu Hardwarezeichnung wird und XNA-Hintergrundzeichnung ebenfalls aktiviert ist. Jetzt können Sie XNA-Programme nach Herzenslust erstellen.

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