Fouten in een programma opsporen met XNA in Silverlight5

Pagina bijgewerkt :
Aanmaakdatum van pagina :

De uitleg wordt uitgelegd in volgorde vanaf het maken van het project, dus sla de delen die u begrijpt over.

Maak eerst een Silverlight-toepassing. Kies in het menu Visual Studio de optie Bestand, Nieuw, Project.

プロジェクトの新規作成

Selecteer Silverlight Application.

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

Met betrekking tot het hosten van websites moet u de site opgeven die u wilt hosten. Testpagina's die automatisch worden gegenereerd bij foutopsporing in Silverlight alleen, kunnen geen XNA-programma's uitvoeren die de GPU gebruiken. (Dit is echter niet van toepassing wanneer u handmatig een testpagina maakt.)

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

Nadat het project is gemaakt, klikt u met de rechtermuisknop op Verwijzingen in de Silverlight-toepassing en selecteert u Referentie toevoegen.

参照の追加

Selecteer "Assembly" en "Framework" in het menu aan de linkerkant en controleer de volgende items. (Druk nog niet op de knop OK)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics
  • Systeem.Windows.Xna

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

Selecteer vervolgens "Geavanceerd" in het menu aan de linkerkant, controleer de volgende items en druk op de knop OK.

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

We hebben het minimum geselecteerd dat nodig is om een XNA-programma uit te voeren, dus selecteer de assemblage waarnaar u wilt verwijzen op basis van uw behoeften.

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

Er wordt een verwijzing naar de assemblage toegevoegd.

参照一覧

Vervolgens passen we de code aan. Deze keer wordt alleen de minimale informatie beschreven die laat zien of het XNA-programma correct werkte.

Open MainPage.xaml vanuit uw Silverlight-toepassing en voeg de volgende code toe:

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

De DrawingSurface is het gebied waar het XNA-programma naartoe trekt. Wanneer de gebeurtenis Draw wordt uitgevoerd, komt deze herhaaldelijk voor, dus beschrijf het tekenproces daar. Deze keer teken ik alleen de achtergrondkleur, zodat u kunt zien of deze goed werkt.

textBlockMessage wordt gebruikt om tekst weer te geven of een XNA-programma goed werkt of niet. Deze keer zet ik het erin om het te bevestigen, dus ik heb het niet nodig in de daadwerkelijke release.

Open vervolgens het bestand "MainPage.xaml.cs". Laten we eerst de gebruikende delen sorteren. De naamruimte voor de Silverlight-toepassing is opgegeven, dus we zullen deze wijzigen voor XNA. Wanneer u het daadwerkelijk maakt, definieer het dan op basis van uw toepassing.

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;

Wanneer u vervolgens opstart, wilt u de huidige overvloeimodus weergeven en de reden waarom u geen tekst kon tekenen. Ik schrijf het in de constructor omdat ik weet wanneer de Silverlight-applicatie wordt gestart.

public MainPage()
{
  InitializeComponent();

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

Schrijf het tekenproces. In dit geval willen we gewoon dat het XNA Framework de achtergrond tekent wanneer de tekengebeurtenis plaatsvindt.

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

Laten we foutopsporing uitvoeren.

デバッグ実行。

Wanneer u het uitvoert, wordt het weergegeven zoals weergegeven in de afbeelding. RenderMode: Unavailable staat geen hardwarerendering toe, RenderModeReason:GPUAccelerationDisabled schakelt GPU-rendering uit. Dit is een probleem op de server, dus u moet het eerst inschakelen.

描画ができない

Open het < projectnaam>TestPage.aspx bestand van het ASP.NET project dat wordt gehost in de Silverlight-uitvoering.

TestPage.aspx を開く

Voeg "EnableGPUAcceleration" toe aan de parameter van het object en stel de waarde in op "true". Dit geeft de server toestemming voor deze Silverlight-toepassing om de GPU te gebruiken. (Eigenlijk wordt het opgelost door clientverwerking, maar omdat het de server is die HTML uitvoert, is het een probleem aan de serverzijde.)

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

Als je het hiermee probeert uit te voeren, lijkt het op de figuur. RenderModeReason is nu SecurityBlocked. Dit komt omdat GPU-tekenen om veiligheidsredenen standaard niet is toegestaan. Aangezien dit een clientprobleem is, moet u de gebruiker naast het uitvoeren van foutopsporing ook de volgende stappen laten uitvoeren om de GPU te laten tekenen.

RenderModeReason が SecurityBlocked に変化

Als u GPU-rendering wilt toestaan, klikt u met de rechtermuisknop op de Silverlight-toepassing en kiest u Silverlight in het menu.

Silverlight を選択

Selecteer in het dialoogvenster dat wordt geopend het tabblad "Machtigingen", selecteer de juiste site en klik vervolgens op de knop "Toestaan".

アクセス許可

Wanneer de toestemming "Toestaan" is, klikt u op de knop OK.

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

Als u foutopsporing uitvoert tijdens het debuggen, wordt het vernieuwen van de browser niet van kracht, dus als u de browser sluit en opnieuw uitvoert, zult u zien dat RenderMode hardwaretekening wordt en XNA-achtergrondtekening ook is ingeschakeld. Nu kunt u naar hartenlust XNA-programma's maken.

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