เมื่อต้องการดีบักโปรแกรมโดยใช้ XNA ใน Silverlight5
คําอธิบายจะอธิบายตามลําดับจากการสร้างโครงการดังนั้นโปรดข้ามส่วนที่คุณเข้าใจ
ขั้นแรก ให้สร้างโปรแกรมประยุกต์ Silverlight จากเมนู Visual Studio ให้เลือก แฟ้ม ใหม่ โครงการ
เลือกแอปพลิเคชันซิลเวอร์ไลท์
เกี่ยวกับการโฮสต์เว็บไซต์ให้แน่ใจว่าได้ระบุไซต์ที่คุณต้องการโฮสต์ หน้าทดสอบที่สร้างขึ้นโดยอัตโนมัติเมื่อดีบักใน Silverlight เพียงอย่างเดียวไม่สามารถเรียกใช้โปรแกรม XNA ที่ใช้ GPU ได้ (อย่างไรก็ตาม สิ่งนี้ใช้ไม่ได้เมื่อคุณสร้างเพจทดสอบด้วยตนเอง)
หลังจากสร้างโครงการแล้ว ให้คลิกขวาที่ การอ้างอิง ในแอปพลิเคชัน Silverlight แล้วเลือก เพิ่มการอ้างอิง
เลือก "Assembly" และ "Framework" จากเมนูด้านซ้ายและตรวจสอบรายการต่อไปนี้ (อย่ากดปุ่ม OK)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
จากนั้นเลือก "ล่วงหน้า" จากเมนูด้านซ้ายตรวจสอบรายการต่อไปนี้แล้วกดปุ่ม OK
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
เราได้เลือกขั้นต่ําที่จําเป็นในการเรียกใช้โปรแกรม XNA ดังนั้นเลือกแอสเซมบลีเพื่ออ้างอิงตามความต้องการของคุณ
มีการเพิ่มการอ้างอิงถึงแอสเซมบลี
ต่อไปเราจะปรับแต่งรหัส คราวนี้อธิบายเฉพาะข้อมูลขั้นต่ําที่แสดงว่าโปรแกรม XNA ทํางานอย่างถูกต้องหรือไม่
จากโปรแกรมประยุกต์ Silverlight ของคุณ ให้เปิด MainPage.xaml และเพิ่มรหัสต่อไปนี้:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface เป็นพื้นที่ที่โปรแกรม XNA ดึงมา เมื่อดําเนินการเหตุการณ์วาดจะเกิดขึ้นซ้ํา ๆ ดังนั้นให้อธิบายกระบวนการวาดที่นั่น คราวนี้ฉันจะวาดเฉพาะสีพื้นหลังเพื่อให้คุณสามารถดูว่ามันทํางานอย่างถูกต้องหรือไม่
textBlockMessage ใช้เพื่อแสดงข้อความว่าโปรแกรม XNA ทํางานอย่างถูกต้องหรือไม่ เวลานี้ฉันใส่ไว้ในการยืนยันมันดังนั้นฉันไม่จําเป็นต้องมันในรุ่นที่เกิดขึ้นจริง
จากนั้นเปิดไฟล์ "MainPage.xaml.cs" ก่อนอื่นเรามาเรียงลําดับชิ้นส่วนที่ใช้ มีการระบุเนมสเปซสําหรับแอปพลิเคชัน Silverlight ดังนั้นเราจะเปลี่ยนเนมสเปซสําหรับ XNA เมื่อสร้างจริงโปรดกําหนดตามแอปพลิเคชันของคุณ
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;
ถัดไปเมื่อคุณเริ่มต้นขึ้นคุณต้องการแสดงโหมดการผสมปัจจุบันและสาเหตุที่คุณไม่สามารถวาดข้อความได้ ฉันเขียนไว้ในตัวสร้างเพราะฉันรู้ว่าเมื่อแอปพลิเคชัน Silverlight เปิดตัว
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
เขียนกระบวนการวาด ในกรณีนี้เราเพียงต้องการให้ XNA Framework วาดพื้นหลังเมื่อเหตุการณ์การวาดภาพเกิดขึ้น
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
มาเรียกใช้การดีบักกัน
เมื่อคุณเรียกใช้มันจะแสดงตามที่แสดงในรูป RenderMode: ไม่พร้อมใช้งานไม่อนุญาตให้มีการเรนเดอร์ฮาร์ดแวร์ RenderModeReason:GPUAccelerationDisabled ปิดใช้งานการเรนเดอร์ GPU นี่เป็นปัญหาฝั่งเซิร์ฟเวอร์ดังนั้นคุณต้องเปิดใช้งานก่อน
เปิดแฟ้มชื่อโครงการ <>TestPage.aspx จากโครงการ ASP.NET ที่โฮสต์ในการเรียกใช้ Silverlight
เพิ่ม "EnableGPUAcceleration" ลงในพารามิเตอร์ของวัตถุและตั้งค่าเป็น "true" สิ่งนี้ให้สิทธิ์ฝั่งเซิร์ฟเวอร์สําหรับแอปพลิเคชัน Silverlight นี้เพื่อใช้ GPU (จริงๆแล้วมันได้รับการแก้ไขโดยการประมวลผลไคลเอนต์ แต่เนื่องจากเป็นเซิร์ฟเวอร์ที่ส่งออก HTML จึงเป็นปัญหาฝั่งเซิร์ฟเวอร์)
<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>
หากคุณพยายามเรียกใช้ด้วยสิ่งนี้มันจะดูเหมือนรูป RenderModeReason อยู่ในขณะนี้การรักษาความปลอดภัยถูกบล็อก นี่เป็นเพราะการวาด GPU ไม่ได้รับอนุญาตโดยค่าเริ่มต้นด้วยเหตุผลด้านความปลอดภัย เนื่องจากนี่เป็นปัญหาของลูกค้านอกเหนือจากการเรียกใช้การดีบักคุณต้องให้ผู้ใช้ทําตามขั้นตอนต่อไปนี้เพื่อให้ GPU สามารถวาดได้
เมื่อต้องการอนุญาตการแสดงผล GPU ให้คลิกขวาที่แอปพลิเคชัน Silverlight แล้วเลือก Silverlight จากเมนู
ในกล่องโต้ตอบที่เปิดขึ้นให้เลือกแท็บ "สิทธิ์" เลือกไซต์ที่เหมาะสมจากนั้นคลิกปุ่ม "อนุญาต"
เมื่อการอนุญาตคือ" อนุญาต" ให้คลิกที่ ตกลง ปุ่ม.
หากคุณกําลังดีบักขณะดีบักการรีเฟรชเบราว์เซอร์จะไม่มีผลดังนั้นหากคุณปิดเบราว์เซอร์และเรียกใช้อีกครั้งคุณจะเห็นว่า RenderMode กลายเป็นการวาดฮาร์ดแวร์และเปิดใช้งานการวาดพื้นหลัง XNA ด้วย ตอนนี้คุณสามารถสร้างโปรแกรม XNA ตามเนื้อหาในใจของคุณได้แล้ว