تصحيح أخطاء برنامج باستخدام XNA في Silverlight5
يتم شرح التفسيرات بالترتيب من إنشاء المشروع ، لذا يرجى تخطي الأجزاء التي تفهمها.
أولا، قم بإنشاء تطبيق Silverlight. من القائمة Visual Studio، اختر ملف، جديد، مشروع.
حدد تطبيق سيلفرلايت.
فيما يتعلق باستضافة مواقع الويب ، تأكد من تحديد الموقع الذي تريد استضافته. لا يمكن اختبار الصفحات التي يتم إنشاؤها تلقائيا عند تصحيح الأخطاء في Silverlight وحده تشغيل برامج XNA التي تستخدم وحدة معالجة الرسومات. (ومع ذلك، لا ينطبق هذا عند إنشاء صفحة اختبار يدويا.)
بعد إنشاء المشروع، انقر بزر الماوس الأيمن فوق مراجع في تطبيق Silverlight وحدد إضافة مرجع.
حدد "التجميع" و "الإطار" من القائمة الموجودة على اليسار وتحقق من العناصر التالية. (لا تضغط على الزر موافق ( 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 برسم الخلفية عند حدوث حدث الرسم.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
دعونا تشغيل تصحيح الأخطاء.
عند تشغيله ، سيتم عرضه كما هو موضح في الشكل. RenderMode: غير متوفر لا يسمح بعرض الأجهزة, RenderModeReason:GPUAccelerationDisabled يعطل عرض وحدة معالجة الرسومات. هذه مشكلة من جانب الخادم ، لذلك تحتاج إلى تمكينها أولا.
افتح ملف اسم المشروع <>TestPage.aspx من المشروع ASP.NET المستضاف في تشغيل Silverlight.
أضف "EnableGPUAcceleration" إلى معلمة الكائن وقم بتعيين القيمة إلى "true". هذا يعطي إذن جانب الخادم لتطبيق Silverlight هذا لاستخدام وحدة معالجة الرسومات. (في الواقع ، يتم حلها عن طريق معالجة العميل ، ولكن نظرا لأن الخادم هو الذي يخرج 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 هو الآن SecurityBlocked. وذلك لأن رسم GPU غير مسموح به افتراضيا لأسباب أمنية. نظرا لأن هذه مشكلة عميل ، بالإضافة إلى تشغيل تصحيح الأخطاء ، تحتاج أيضا إلى أن يقوم المستخدم بتنفيذ الخطوات التالية للسماح لوحدة معالجة الرسومات بالرسم.
للسماح بعرض وحدة معالجة الرسومات، انقر بزر الماوس الأيمن فوق تطبيق Silverlight واختر Silverlight من القائمة.
في مربع الحوار الذي يفتح ، حدد علامة التبويب "أذونات" ، وحدد الموقع المناسب ، ثم انقر فوق الزر "السماح".
عندما يكون الإذن "السماح" ، انقر فوق الزر موافق ( OK) .
إذا كنت تقوم بتصحيح الأخطاء أثناء تصحيح الأخطاء ، فلن يصبح تحديث المتصفح ساري المفعول ، لذلك إذا قمت بإغلاق المتصفح وتشغيله مرة أخرى ، فسترى أن RenderMode يصبح رسم الأجهزة ويتم تمكين رسم خلفية XNA أيضا. يمكنك الآن إنشاء برامج XNA لمحتوى قلبك.