Aby debugować program przy użyciu XNA w programie Silverlight5
Wyjaśnienia są wyjaśnione w kolejności od momentu utworzenia projektu, więc pomiń części, które rozumiesz.
Najpierw utwórz aplikację Silverlight. Z menu Visual Studio wybierz polecenie Plik, Nowy, Projekt.From the Visual Studio menu, choose File, New, Project.
Wybierz opcję Aplikacja Silverlight.
Jeśli chodzi o obsługę witryn sieci Web, należy określić witrynę, która ma być obsługiwana. Strony testowe, które są generowane automatycznie podczas debugowania w samym programie Silverlight, nie mogą uruchamiać programów XNA, które używają procesora GPU. (Nie dotyczy to jednak ręcznego tworzenia strony testowej).
Po utworzeniu projektu kliknij prawym przyciskiem myszy pozycję Odwołania w aplikacji Silverlight i wybierz polecenie Dodaj odwołanie.
Wybierz "Zespół" i "Struktura" z menu po lewej stronie i sprawdź następujące elementy. (Nie naciskaj jeszcze przycisku OK)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
Następnie wybierz "Advance" z menu po lewej stronie, sprawdź następujące elementy i naciśnij przycisk OK.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Wybraliśmy minimum niezbędne do uruchomienia programu XNA, więc wybierz zespół, do którego chcesz się odwołać zgodnie z Twoimi potrzebami.
Dodano odniesienie do zespołu.
Następnie poprawimy kod. Tym razem opisano tylko minimum informacji, które pokazują, czy program XNA działał poprawnie.
W aplikacji Silverlight otwórz plik MainPage.xaml i dodaj następujący kod:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface to obszar, do którego rysuje program XNA. Po uruchomieniu zdarzenie Draw występuje wielokrotnie, więc opisz tam proces rysowania. Tym razem narysuję tylko kolor tła, abyś mógł zobaczyć, czy działa poprawnie.
textBlockMessage służy do wyświetlania tekstu, niezależnie od tego, czy program XNA działa poprawnie, czy nie. Tym razem umieszczam go, aby to potwierdzić, więc nie potrzebuję go w rzeczywistym wydaniu.
Po wykonaniu tej czynności spróbuj otworzyć plik "MainPage.xaml.cs" Najpierw uporządkujmy używane części. Przestrzeń nazw dla aplikacji Silverlight jest określona, więc zmienimy ją na XNA. Podczas tworzenia go zdefiniuj go zgodnie z aplikacją.
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;
Następnie, po uruchomieniu, chcesz wyświetlić bieżący tryb mieszania i powód, dla którego nie możesz rysować tekstu. Piszę to w konstruktorze, ponieważ wiem, kiedy uruchamiana jest aplikacja Silverlight.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Napisz proces rysowania. W tym przypadku chcemy, aby struktura XNA rysowała tło, gdy wystąpi zdarzenie rysowania.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Uruchom debugowanie.
Po uruchomieniu zostanie wyświetlony w sposób pokazany na rysunku. RenderMode: Unavailable nie zezwala na renderowanie sprzętowe, RenderModeReason:GPUAccelerationDisabled wyłącza renderowanie GPU. Jest to problem po stronie serwera, więc musisz go najpierw włączyć.
Otwórz plik < nazwa projektu>TestPage.aspx z projektu ASP.NET hostowanego w przebiegu programu Silverlight.
Dodaj "EnableGPUAcceleration" do parametru obiektu i ustaw wartość na "true". Daje to stronie serwera uprawnienie dla tej aplikacji Silverlight do korzystania z procesora GPU. (W rzeczywistości jest to rozwiązywane przez przetwarzanie klienta, ale ponieważ jest to serwer, który generuje HTML, jest to problem po stronie serwera.)
<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>
Jeśli spróbujesz uruchomić go z tym, będzie wyglądał jak rysunek. RenderModeReason to teraz SecurityBlocked. Wynika to z faktu, że rysowanie GPU nie jest domyślnie dozwolone ze względów bezpieczeństwa. Ponieważ jest to problem klienta, oprócz uruchamiania debugowania należy również poprosić użytkownika o wykonanie następujących kroków, aby umożliwić rysowanie procesora GPU.
Aby zezwolić na renderowanie GPU, kliknij prawym przyciskiem myszy aplikację Silverlight i wybierz z menu polecenie Silverlight.
W oknie dialogowym, które zostanie otwarte, wybierz kartę "Uprawnienia", wybierz odpowiednią witrynę, a następnie kliknij przycisk "Zezwól".
Jeśli uprawnienie to "Zezwalaj", kliknij przycisk OK.
Jeśli debugujesz podczas debugowania, odświeżanie przeglądarki nie działa, więc jeśli zamkniesz przeglądarkę i uruchomisz ją ponownie, zobaczysz, że RenderMode staje się rysunkiem sprzętowym, a rysunek tła XNA jest również włączony. Teraz możesz tworzyć programy XNA do woli.