Untuk men-debug program menggunakan XNA di Silverlight5
Penjelasan dijelaskan secara berurutan dari pembuatan proyek, jadi silakan lewati bagian-bagian yang Anda pahami.
Pertama, buat aplikasi Silverlight. Dari menu Visual Studio, pilih File, New, Project.
Pilih Aplikasi Silverlight.
Mengenai situs Web hosting, pastikan untuk menentukan situs yang ingin Anda host. Halaman pengujian yang dihasilkan secara otomatis saat debugging di Silverlight saja tidak dapat menjalankan program XNA yang menggunakan GPU. (Namun, ini tidak berlaku saat Anda membuat halaman pengujian secara manual.)
Setelah proyek dibuat, klik kanan Referensi di aplikasi Silverlight dan pilih Tambahkan Referensi.
Pilih "Assembly" dan "Framework" dari menu di sebelah kiri dan periksa item berikut. (Jangan tekan tombol OK dulu)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- Sistem.Windows.Xna
Selanjutnya, pilih "Advance" dari menu di sebelah kiri, periksa item berikut, dan tekan tombol OK.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Kami telah memilih minimum yang diperlukan untuk menjalankan program XNA, jadi pilih perakitan untuk referensi sesuai dengan kebutuhan Anda.
Referensi ke perakitan ditambahkan.
Selanjutnya, kita akan mengubah kode. Kali ini, hanya informasi minimum yang menunjukkan apakah program XNA bekerja dengan benar yang dijelaskan.
Dari aplikasi Silverlight Anda, buka MainPage.xaml dan tambahkan kode berikut:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface adalah area yang ditarik oleh program XNA. Saat dijalankan, peristiwa Draw terjadi berulang kali, jadi jelaskan proses menggambar di sana. Kali ini, saya hanya akan menggambar warna latar belakang sehingga Anda dapat melihat apakah itu berfungsi dengan baik.
textBlockMessage digunakan untuk menampilkan teks apakah program XNA berfungsi dengan baik atau tidak. Kali ini saya memasukkannya untuk mengonfirmasinya, jadi saya tidak membutuhkannya dalam rilis yang sebenarnya.
Kemudian buka file "MainPage.xaml.cs". Pertama, mari kita pilah bagian yang digunakan. Namespace untuk aplikasi Silverlight ditentukan, jadi kami akan mengubahnya untuk XNA. Saat benar-benar membuatnya, harap tentukan sesuai dengan aplikasi Anda.
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;
Selanjutnya, ketika Anda memulai, Anda ingin menampilkan mode pencampuran saat ini dan alasan mengapa Anda tidak dapat menggambar dalam teks. Saya menulisnya di konstruktor karena saya tahu kapan aplikasi Silverlight diluncurkan.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Tulis proses menggambar. Dalam hal ini, kita hanya ingin XNA Framework menggambar latar belakang ketika peristiwa menggambar terjadi.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Mari kita jalankan debugging.
Ketika Anda menjalankannya, itu akan ditampilkan seperti yang ditunjukkan pada gambar. RenderMode: Tidak tersedia tidak mengizinkan rendering perangkat keras, RenderModeReason:GPUAccelerationDisabled menonaktifkan rendering GPU. Ini adalah masalah sisi server, jadi Anda harus mengaktifkannya terlebih dahulu.
Buka file < project name>TestPage.aspx dari proyek ASP.NET yang dihosting dalam proses Silverlight.
Tambahkan "EnableGPUAcceleration" ke parameter objek dan atur nilainya menjadi "true". Ini memberikan izin sisi server untuk aplikasi Silverlight ini untuk menggunakan GPU. (Sebenarnya, ini diselesaikan dengan pemrosesan klien, tetapi karena ini adalah server yang menghasilkan HTML, ini adalah masalah sisi 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>
Jika Anda mencoba menjalankannya dengan ini, itu akan terlihat seperti gambar. RenderModeReason sekarang SecurityBlocked. Ini karena gambar GPU tidak diizinkan secara default untuk alasan keamanan. Karena ini adalah masalah klien, selain menjalankan debugging, Anda juga perlu meminta pengguna melakukan langkah-langkah berikut untuk memungkinkan GPU menggambar.
Untuk mengizinkan rendering GPU, klik kanan aplikasi Silverlight dan pilih Silverlight dari menu.
Pada dialog yang terbuka, pilih tab "Izin", pilih situs yang sesuai, lalu klik tombol "Izinkan".
Ketika izinnya adalah "Izinkan", klik tombol OK.
Jika Anda men-debug saat debugging, menyegarkan browser tidak berlaku, jadi jika Anda menutup browser dan menjalankannya lagi, Anda akan melihat bahwa RenderMode menjadi gambar perangkat keras dan gambar latar belakang XNA juga diaktifkan. Sekarang Anda dapat membuat program XNA sepuasnya.