تصحيح أخطاء برنامج باستخدام XNA في Silverlight5

تحديث الصفحة :
تاريخ إنشاء الصفحة :

يتم شرح التفسيرات بالترتيب من إنشاء المشروع ، لذا يرجى تخطي الأجزاء التي تفهمها.

أولا، قم بإنشاء تطبيق Silverlight. من القائمة Visual Studio، اختر ملف، جديد، مشروع.

プロジェクトの新規作成

حدد تطبيق سيلفرلايت.

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

فيما يتعلق باستضافة مواقع الويب ، تأكد من تحديد الموقع الذي تريد استضافته. لا يمكن اختبار الصفحات التي يتم إنشاؤها تلقائيا عند تصحيح الأخطاء في Silverlight وحده تشغيل برامج XNA التي تستخدم وحدة معالجة الرسومات. (ومع ذلك، لا ينطبق هذا عند إنشاء صفحة اختبار يدويا.)

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

بعد إنشاء المشروع، انقر بزر الماوس الأيمن فوق مراجع في تطبيق 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.

TestPage.aspx を開く

أضف "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 غير مسموح به افتراضيا لأسباب أمنية. نظرا لأن هذه مشكلة عميل ، بالإضافة إلى تشغيل تصحيح الأخطاء ، تحتاج أيضا إلى أن يقوم المستخدم بتنفيذ الخطوات التالية للسماح لوحدة معالجة الرسومات بالرسم.

RenderModeReason が SecurityBlocked に変化

للسماح بعرض وحدة معالجة الرسومات، انقر بزر الماوس الأيمن فوق تطبيق Silverlight واختر Silverlight من القائمة.

Silverlight を選択

في مربع الحوار الذي يفتح ، حدد علامة التبويب "أذونات" ، وحدد الموقع المناسب ، ثم انقر فوق الزر "السماح".

アクセス許可

عندما يكون الإذن "السماح" ، انقر فوق الزر موافق ( OK) .

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

إذا كنت تقوم بتصحيح الأخطاء أثناء تصحيح الأخطاء ، فلن يصبح تحديث المتصفح ساري المفعول ، لذلك إذا قمت بإغلاق المتصفح وتشغيله مرة أخرى ، فسترى أن RenderMode يصبح رسم الأجهزة ويتم تمكين رسم خلفية XNA أيضا. يمكنك الآن إنشاء برامج XNA لمحتوى قلبك.

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