برای اشکال زدایی یک برنامه با استفاده از XNA در Silverlight5
توضیحات به ترتیب از ایجاد پروژه توضیح داده شده است، بنابراین لطفا از قطعاتی که درک می کنید بگذرید.
اول ، ایجاد یک برنامه Silverlight. از منوی Visual Studio، File, New, Project را انتخاب کنید.
برنامه Silverlight را انتخاب کنید.
با توجه به میزبانی وب سایت ها، حتماً سایت مورد نظر خود را که می خواهید میزبانی کنید مشخص کنید. صفحات تست که به طور خودکار تولید می شوند در هنگام اشکال زدایی در Silverlight به تنهایی نمی توانند برنامه های XNA را اجرا کنند که از GPU استفاده می کنند. (با این حال، این کار زمانی که شما به صورت دستی یک صفحه آزمون ایجاد می کنید اعمال نمی شود.)
پس از ایجاد پروژه، مراجع در برنامه Silverlight کلیک راست کرده و Add Reference را انتخاب کنید.
"مجمع" و "چارچوب" را از منوی سمت چپ انتخاب کنید و موارد زیر را بررسی کنید. (هنوز دکمه 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.© را باز کنید و کد زیر را اضافه کنید:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface منطقه ای است که برنامه XNA به آن ترسیم می کند. هنگامی که اجرا می شود، رویداد Draw بارها رخ می دهد، بنابراین فرایند نقاشی را در آنجا توصیف کنید. این بار، من فقط رنگ پس زمینه رسم به طوری که شما می توانید ببینید که آیا آن را به درستی کار می کند.
textBlockMessage برای نمایش متن استفاده می شود که آیا یک برنامه XNA درست کار می کند یا نه. این بار من آن را در قرار دادن آن را تایید، بنابراین من آن را در انتشار واقعی نیاز ندارد.
سپس پرونده "MainPage..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: Unavailable اجازه رندر سخت افزاری را نمی دهد، RenderModeReason:GPUAccelerationDisabled رندر GPU را غیرفعال می کند. این یک مسئله سمت سرور است، بنابراین شما باید ابتدا آن را فعال کنید.
باز کردن < نام پروژه >TestPage.aspx از پروژه ASP.NET میزبانی شده در اجرای Silverlight.
افزودن "EnableGPUAcceleration" به پارامتر شیء و تنظیم مقدار به "درست". این اجازه سمت سرور برای این برنامه 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 به دلایل امنیتی به طور پیش فرض مجاز نیست. از آنجا که این یک مسئله مشتری است، علاوه بر در حال اجرا debugging، شما همچنین نیاز به کاربر انجام مراحل زیر اجازه می دهد تا GPU به قرعه کشی.
برای اجازه دادن به رندر GPU، روی برنامه Silverlight راست کلیک کنید و Silverlight را از منو انتخاب کنید.
در محاوره ای که باز می شود، زبانه "مجوزها" را انتخاب کنید، سایت مناسب را انتخاب کنید و سپس روی دکمه "اجازه" کلیک کنید.
هنگامی که اجازه "اجازه" است، روی دکمه OK کلیک کنید.
اگر شما در حال اشکال زدایی در حالی که اشکال زدایی, طراوت مرورگر اثر نمی کند, بنابراین اگر شما بستن مرورگر و اجرای آن را دوباره, شما خواهید دید که RenderMode تبدیل به طراحی سخت افزار و طراحی پس زمینه XNA نیز فعال است. حالا شما می توانید برنامه های XNA را به محتوای قلب خود ایجاد کنید.