Sådan foretager du fejlfinding af et program ved hjælp af XNA i Silverlight5

Side opdateret :
Dato for oprettelse af side :

Forklaringerne forklares i rækkefølge fra oprettelsen af projektet, så spring venligst over de dele, du forstår.

Opret først et Silverlight-program. I menuen Visual Studio skal du vælge Filer, Ny, Projekt.

プロジェクトの新規作成

Vælg Silverlight-applikation.

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

Med hensyn til hosting af websteder skal du sørge for at angive det websted, du vil være vært for. Testsider, der genereres automatisk ved fejlfinding i Silverlight alene, kan ikke køre XNA-programmer, der bruger GPU'en. (Dette gælder dog ikke, når du manuelt opretter en testside).

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

Når projektet er oprettet, skal du højreklikke på Referencer i Silverlight-programmet og vælge Tilføj reference.

参照の追加

Vælg "Assembly" og "Framework" i menuen til venstre og kontroller følgende punkter. (Tryk ikke på OK-knappen endnu)

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

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

Vælg derefter "Advance" i menuen til venstre, kontroller følgende elementer, og tryk på OK-knappen.

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

Vi har valgt det minimum, der er nødvendigt for at køre et XNA-program, så vælg den samling, der skal henvises til efter dine behov.

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

Der tilføjes en henvisning til forsamlingen.

参照一覧

Dernæst justerer vi koden. Denne gang beskrives kun de mindste oplysninger, der viser, om XNA-programmet fungerede korrekt.

Fra dit Silverlight-program skal du åbne MainPage.xaml og tilføje følgende kode:

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

DrawingSurface er det område, som XNA-programmet trækker til. Når den udføres, forekommer lodtrækningshændelsen gentagne gange, så beskriv tegningsprocessen der. Denne gang tegner jeg kun baggrundsfarven, så du kan se, om den fungerer korrekt.

textBlockMessage bruges til at vise tekst, uanset om et XNA-program fungerer korrekt eller ej. Denne gang sætter jeg det ind for at bekræfte det, så jeg har ikke brug for det i selve udgivelsen.

Åbn derefter filen "MainPage.xaml.cs". Lad os først sortere de anvendte dele. Navneområdet for Silverlight-applikationen er angivet, så vi ændrer det til XNA. Når du rent faktisk opretter det, skal du definere det i henhold til din applikation.

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;

Dernæst, når du starter, vil du vise den aktuelle blandingstilstand og årsagen til, at du ikke kunne tegne tekst. Jeg skriver det i konstruktøren, fordi jeg ved, hvornår Silverlight-applikationen lanceres.

public MainPage()
{
  InitializeComponent();

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

Skriv tegningsprocessen. I dette tilfælde ønsker vi bare, at XNA Framework skal tegne baggrunden, når tegningsbegivenheden finder sted.

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

Lad os køre fejlfinding.

デバッグ実行。

Når du kører det, vises det som vist på figuren. RenderMode: Utilgængelig tillader ikke hardwaregengivelse, RenderModeÅrsag:GPUAccelerationDisabled deaktiverer GPU-gengivelse. Dette er et problem på serversiden, så du skal først aktivere det.

描画ができない

Åbn filen < projektnavn>TestPage.aspx fra det ASP.NET projekt, der hostes i Silverlight-kørslen.

TestPage.aspx を開く

Tilføj "EnableGPUAcceleration" til objektets parameter, og indstil værdien til "true". Dette giver serversiden tilladelse til, at denne Silverlight-applikation kan bruge GPU'en. (Faktisk løses det ved klientbehandling, men da det er serveren, der udsender HTML, er det et problem på serversiden.)

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

Hvis du prøver at køre det med dette, vil det ligne figuren. RenderModeReason er nu SecurityBlocked. Dette skyldes, at GPU-tegning ikke er tilladt som standard af sikkerhedsmæssige årsager. Da dette er et klientproblem, skal du ud over at køre fejlfinding også få brugeren til at udføre følgende trin for at tillade GPU'en at tegne.

RenderModeReason が SecurityBlocked に変化

For at tillade GPU-gengivelse skal du højreklikke på Silverlight-applikationen og vælge Silverlight i menuen.

Silverlight を選択

I dialogboksen, der åbnes, skal du vælge fanen "Tilladelser", vælge det relevante websted og derefter klikke på knappen "Tillad".

アクセス許可

Når tilladelsen er "Tillad", skal du klikke på knappen OK.

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

Hvis du fejler under fejlfinding, træder opdatering af browseren ikke i kraft, så hvis du lukker browseren og kører den igen, vil du se, at RenderMode bliver hardwaretegning, og XNA-baggrundstegning er også aktiveret. Nu kan du oprette XNA-programmer til dit hjertes indhold.

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