כדי לאתר באגים בתוכנית באמצעות XNA ב- Silverlight5
ההסברים מוסברים לפי סדר יצירת הפרויקט, אז אנא דלגו על החלקים שאתם מבינים.
ראשית, צור יישום Silverlight. מתפריט Visual Studio, בחר קובץ, חדש, פרוייקט.
בחר יישום Silverlight.
לגבי אירוח אתרי אינטרנט, הקפד לציין את האתר שברצונך לארח. דפי בדיקה שנוצרים באופן אוטומטי בעת איתור באגים ב- Silverlight בלבד אינם יכולים להפעיל תוכניות XNA המשתמשות ב- GPU. (עם זאת, הדבר אינו חל בעת יצירה ידנית של דף בדיקה).
לאחר יצירת הפרוייקט, לחץ באמצעות לחצן העכבר הימני על הפניות ביישום Silverlight ובחר הוסף הפניה.
בחר "הרכבה" ו "מסגרת" מהתפריט בצד שמאל ולבדוק את הפריטים הבאים. (אל תלחץ עדיין על כפתור אישור)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Graphics
- System.Windows.Xna
לאחר מכן, בחר "התקדמות" מהתפריט בצד שמאל, בדוק את הפריטים הבאים ולחץ על כפתור אישור.
- 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 זה להשתמש ב- 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 הוא כעת SecurityBlocked. הסיבה לכך היא שציור GPU אינו מותר כברירת מחדל מטעמי אבטחה. מכיוון שמדובר בבעיית לקוח, בנוסף להפעלת איתור באגים, עליך גם לבקש מהמשתמש לבצע את השלבים הבאים כדי לאפשר ל- GPU לצייר.
כדי לאפשר עיבוד GPU, לחץ באמצעות לחצן העכבר הימני על היישום Silverlight ובחר Silverlight מהתפריט.
בתיבת הדו-שיח שנפתחת, בחר בכרטיסייה "הרשאות", בחר את האתר המתאים ולאחר מכן לחץ על הלחצן "אפשר".
כאשר ההרשאה היא "אפשר", לחץ על בסדר לחצן.
אם אתה מאתר באגים בעת איתור באגים, רענון הדפדפן אינו נכנס לתוקף, כך שאם תסגור את הדפדפן ותפעיל אותו שוב, תראה ש- RenderMode הופך לציור חומרה וציור רקע XNA מופעל גם הוא. עכשיו אתה יכול ליצור תוכניות XNA כאוות נפשך.