Per eseguire il debug di un programma utilizzando XNA in Silverlight5
Le spiegazioni sono spiegate in ordine dalla creazione del progetto, quindi per favore salta le parti che capisci.
Creare innanzitutto un'applicazione Silverlight. Scegliere File, Nuovo, Progetto dal menu Visual Studio.
Selezionare Applicazione Silverlight.
Per quanto riguarda l'hosting di siti Web, assicurarsi di specificare il sito che si desidera ospitare. Le pagine di test generate automaticamente durante il debug in Silverlight da solo non possono eseguire programmi XNA che utilizzano la GPU. Tuttavia, questo non si applica quando si crea manualmente una pagina di prova.
Dopo aver creato il progetto, fare clic con il pulsante destro del mouse su Riferimenti nell'applicazione Silverlight e scegliere Aggiungi riferimento.
Seleziona "Assemblaggio" e "Struttura" dal menu a sinistra e controlla le seguenti voci. (Non premere ancora il pulsante OK)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- [ T:System.Windows.Xna ]
Quindi, seleziona "Avanzate" dal menu a sinistra, seleziona i seguenti elementi e premi il pulsante OK.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Abbiamo selezionato il minimo necessario per eseguire un programma XNA, quindi selezionare l'assembly a cui fare riferimento in base alle proprie esigenze.
Viene aggiunto un riferimento all'assieme.
Successivamente, modificheremo il codice. Questa volta, vengono descritte solo le informazioni minime che mostrano se il programma XNA ha funzionato correttamente.
Dall'applicazione Silverlight aprire MainPage.xaml e aggiungere il codice seguente:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface è l'area in cui disegna il programma XNA. Quando viene eseguito, l'evento Draw si verifica ripetutamente, quindi descrivi il processo di disegno lì. Questa volta, disegnerò solo il colore di sfondo in modo che tu possa vedere se funziona correttamente.
textBlockMessage viene utilizzato per visualizzare il testo indipendentemente dal corretto funzionamento o meno di un programma XNA. Questa volta lo sto inserendo per confermarlo, quindi non ne ho bisogno nella versione effettiva.
Apri quindi il file "MainPage.xaml.cs". Per prima cosa, risolviamo le parti utilizzate. Lo spazio dei nomi per l'applicazione Silverlight è specificato, quindi verrà modificato per XNA. Quando lo si crea effettivamente, si prega di definirlo in base alla propria applicazione.
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;
Successivamente, all'avvio, si desidera visualizzare il metodo di fusione corrente e il motivo per cui non è stato possibile disegnare nel testo. Lo scrivo nel costruttore perché so quando viene avviata l'applicazione Silverlight.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Scrivere il processo di disegno. In questo caso, vogliamo solo che XNA Framework disegni lo sfondo quando si verifica l'evento di disegno.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Eseguiamo il debug.
Quando lo esegui, verrà visualizzato come mostrato nella figura. RenderMode: non disponibile non consente il rendering hardware, RenderModeReason:GPUAccelerationDisabled disabilita il rendering GPU. Questo è un problema lato server, quindi è necessario abilitarlo prima.
Aprire il file < nome progetto>TestPage.aspx dal progetto ASP.NET ospitato nell'esecuzione di Silverlight.
Aggiungere "EnableGPUAcceleration" al parametro dell'oggetto e impostare il valore su "true". In questo modo l'applicazione Silverlight concede l'autorizzazione lato server per l'utilizzo della GPU. (In realtà, è risolto dall'elaborazione client, ma poiché è il server che genera HTML, è un problema lato server.)
<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>
Se provi a eseguirlo con questo, assomiglierà alla figura. RenderModeReason è ora SecurityBlocked. Questo perché il disegno GPU non è consentito per impostazione predefinita per motivi di sicurezza. Poiché si tratta di un problema del client, oltre all'esecuzione del debug, è necessario che l'utente esegua i seguenti passaggi per consentire alla GPU di disegnare.
Per consentire il rendering GPU, fare clic con il pulsante destro del mouse sull'applicazione Silverlight e scegliere Silverlight dal menu.
Nella finestra di dialogo che si apre, seleziona la scheda "Autorizzazioni", seleziona il sito appropriato, quindi fai clic sul pulsante "Consenti".
Quando l'autorizzazione è "Consenti", fai clic sul pulsante OK.
Se si esegue il debug durante il debug, l'aggiornamento del browser non ha effetto, quindi se si chiude il browser e lo si esegue di nuovo, si noterà che RenderMode diventa disegno hardware e anche il disegno in background XNA è abilitato. Ora è possibile creare programmi XNA a proprio piacimento.