So debuggen Sie ein Programm mithilfe von XNA in Silverlight5
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.
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.)
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.
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.
Um GPU-Rendering zuzulassen, klicken Sie mit der rechten Maustaste auf die Silverlight-Anwendung, und wählen Sie Silverlight aus dem Menü aus.
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.