เมื่อต้องการดีบักโปรแกรมโดยใช้ XNA ใน Silverlight5

ปรับปรุงหน้า :
วันที่สร้างเพจ :

คําอธิบายจะอธิบายตามลําดับจากการสร้างโครงการดังนั้นโปรดข้ามส่วนที่คุณเข้าใจ

ขั้นแรก ให้สร้างโปรแกรมประยุกต์ Silverlight จากเมนู Visual Studio ให้เลือก แฟ้ม ใหม่ โครงการ

プロジェクトの新規作成

เลือกแอปพลิเคชันซิลเวอร์ไลท์

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

เกี่ยวกับการโฮสต์เว็บไซต์ให้แน่ใจว่าได้ระบุไซต์ที่คุณต้องการโฮสต์ หน้าทดสอบที่สร้างขึ้นโดยอัตโนมัติเมื่อดีบักใน Silverlight เพียงอย่างเดียวไม่สามารถเรียกใช้โปรแกรม XNA ที่ใช้ GPU ได้ (อย่างไรก็ตาม สิ่งนี้ใช้ไม่ได้เมื่อคุณสร้างเพจทดสอบด้วยตนเอง)

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

หลังจากสร้างโครงการแล้ว ให้คลิกขวาที่ การอ้างอิง ในแอปพลิเคชัน 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

TestPage.aspx を開く

เพิ่ม "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 สามารถวาดได้

RenderModeReason が SecurityBlocked に変化

เมื่อต้องการอนุญาตการแสดงผล GPU ให้คลิกขวาที่แอปพลิเคชัน Silverlight แล้วเลือก Silverlight จากเมนู

Silverlight を選択

ในกล่องโต้ตอบที่เปิดขึ้นให้เลือกแท็บ "สิทธิ์" เลือกไซต์ที่เหมาะสมจากนั้นคลิกปุ่ม "อนุญาต"

アクセス許可

เมื่อการอนุญาตคือ" อนุญาต" ให้คลิกที่ ตกลง ปุ่ม.

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

หากคุณกําลังดีบักขณะดีบักการรีเฟรชเบราว์เซอร์จะไม่มีผลดังนั้นหากคุณปิดเบราว์เซอร์และเรียกใช้อีกครั้งคุณจะเห็นว่า RenderMode กลายเป็นการวาดฮาร์ดแวร์และเปิดใช้งานการวาดพื้นหลัง XNA ด้วย ตอนนี้คุณสามารถสร้างโปรแกรม XNA ตามเนื้อหาในใจของคุณได้แล้ว

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