ورود

نسخه کامل مشاهده نسخه کامل : آموزش مقدماتی و فشرده شروع برنامه نویسی گرافیکی سه بعدی تحت XNA و زبان های VB.Net و C#.Net



_H2_
19-07-2009, 11:24
به نام خداوند بخشنده مهربان
سلام

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

با توجه به عدم منابع منابع کافی فارسی در خصوص تولید برنامه های سه بعدی از قبیل شبیه سازها و بازیهای رایانه ای و بنابر درخواست برخی دوستان تصمیم گرفتم یک تاپیک آموزشی فوق العاده کوچک و مختصر و البته مفید در این خصوص ایجاد کنم.
با توجه به وقت آزاد اندکی که دارم، نمیتوانم تضمینی روی زمان آپدیتهای مطالب این تاپیک و پست های جدید بدهم ...
شاید تاپیک مدت زیادی بخوابد، انشا ا... که خدابخواهد و شرمنده دوستان در جهت به انتها رساندن تاپیک نشوم.
:11::11::11:

==============


► زیر ساخت ◄
- فقط سیستم عامل های فعلی مایکروسافت XP و Server و Vista و Win7
- هسته پردازش سه بعدی مایکروسافت DirectX9/10
- پلتفرم مدیریت شده مایکروسافت Net Framework2.0/3.5 + XNA 3.1.
- زبان برنامه نویسی فقط VB.Net2008 و C#.Net2008
(
طبیعی است که تاپیک آموزشی در خصوص دو زبان فوق نمیدهد و دوستان باید یک پیش ضمینه و اطلاعاتی در خصوص کلمات کلیدی و سینتکس و دستورات و... زبان C#.Net یا VB.Net داشته باشند و مستقلاً حداقل کتابی در خصوص یکی از این دو زبان مطالعه کرده باشند.
)

==============


► اهداف ◄
- بیان بسیار بسیار فشرده و کوتاه مبانی مهم ریاضی و هندسه سه بعدی دخیل در این قبیل پروژه ها
- توضیحات کلی و فشرده در خصوص فضای سه بعدی و مفاهیم مورد نیاز
- روش کار و کنترل دوربین به سه روش مختلف مرسوم
- نحوه نمایش تصاویر و متون دو بعدی بر روی صفحه نمایش
- نحوه تبدیل فرمتها و آماده سازی اشیا طراحی شده در Autodesk 3ds Max 2009 برای کار در برنامه
- نحوه تبدیل و نمایش و حرکت اشیا طراحی شده درون برنامه با/بدون انیمیشن
(
با توجه به شرایط خاص و کمی زمان و در جهت سهولت انتقال مطالب و برنامه نویسی هر چه سریعتر از class های موجود در یک dll اضافی با نام ghnet.xna.dll در تمام مطالب توضیحی و پروژه های نمونه استفاده خواهد شد ...
استفاده از این dll میتواند کد نویسی و اللخصوص آموزش را تسریع کند و این تاپیک را با سرعت بیشتر به انتها برساند !
مثل کنترلر دوربین و پخش انیمیشن و... که بعضاً کد نویسی بسیار حجیم و زیادی دارد و خارج از حوصله من و شما است !
)

==============


► کمی کپی رایت ! ◄
در طی ارائه کدهای نمونه باید از برخی اشیاء سه بعدی آماده استفاده کرد ...
(شاید میزی، صندلی، درختی یا خودرویی و...)
که زحمت تهیه برخی از این اشیاء سه بعدی را چندین ماه قبل یکی از دوستانم به نام آقای مرادی (hector2000 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])) کشیدند که بدینوسیله از ایشان تشکر میکنم.

جدای از بحث فوق، دوستان میتوانند یک سری اشیای سه بعدی آماده را که اعضاء معرفی کرده اند در انجمن زیر پیدا کنند:
گــرافیک سه بعدی و انیمیشن ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

==============


► دانلود مطالب و نمونه کدها ◄
انشا ا... کل مطلب نهایی در قالب یک pdf به همراه کل فایلها و نمونه کدها به مرور به پک zip زیر اضافه خواهد شد.
لینک دانلود ثابت:
support.h02.ir/fwlink/?LinkId=1005808167

لینک دانلود فعلی:
h02.ir/Downloads/?familyid=A07656DA-5627-4ED8-B088-53F71BAC7BF3

در حال حاضر و در لحظه ارسال این پست این zip خالی است!
ولی لینک فوق ثابت است و در طول تاپیک تغییری نخواهد کرد.
البته شاید در آینده لینک دوم کار نکند ولی لینک اولی همواره ثابت و مشخص به این پک اختصاص خواهد داشت.

==============


► تقاضا از دوستان ◄
- از دوستانی که فقط با شرایط "زیر ساخت" معرفی شده در بالا میتوانند و میخواهند مطالب و پست های آموزشی منطبق با این "زیر ساخت" قرار دهند تشکر میکنم و دستشان را به گرمی خواهم فشارد!

- ولی از سایر دوستان تقاضا دارم از ارسال سوال و یا پست های تشکر و تأیید و ... خودداری کنند تا تاپیک تمیز تر مشخص تر باشد و پست ها پشت سر هم و با نظم و ترتیب حاوی مطالب اموزشی باشد، طبیعتاً ارسال این پست ها موجب گسست مطالب آموزشی و تکه تکه شدن مطالب آموزشی خواهد شد.

دوستانی که سوال دارند یا صبر کنند مطالب آموزشی و "اهداف" تاپیک همه بیان شوند (شاید سوال ایشان در این بین مطالب آموزشی بعدی پاسخ داده شود) و بعد از پایان همه مطالب آموزشی سوالات مرتبط خود را مطرح کنند و یا سوالات را طبق روال معمول تالارهای گفتگو در یک تاپیک جدید و جدا مطرح کنند.

- احتمالا به دلیل تایپ مطالب و تهیه کد مناسب و بعضاً سورس کد های دو زبان مذکور و... همان وقت اندکی که در کنار دوستان در تاپیک ها فعالیت میکردم گرفته خواهد شد ولی ...
اولاً انکه دوستان فعال و بسیار باسوادی در تالار حضور دارند که حتماً جواب گوی سوالات و مشکلات خواهند بود

دوماً گمان کنم خیلی از دوستان تالار مایل به بیان این مطالب داشته باشند و اخذ اطلاعات گرافیک سه بعدی را ترجیح میدهد به بیان راه حل های مشکلات TextBox و ComboBox ای ... !

جمیعاً موفق و پیروز و البته صبور باشید!

_H2_
19-07-2009, 11:41
سلام
معرفی اهداف تاپیک ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
آشنایی و توضیحات کلی ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
لینک های مهم و دانلود و حداقل ملزومات مورد نیاز System Request ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
معرفی کتاب های الکترونیکی 1 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
معرفی کتاب های الکترونیکی 2 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
حل مشکل VB.Net کارها برای نوشتن کد تحت XNA ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
بیان استانداردها و قرار داد های من و شما و XNA ! ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
آشنایی با موقعیتهای فضایی و بردارهای اصلی جهت در XNA و DirectX ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
سرعت و بازدهی کدهای مختلف 1 - رابطه خصاصت و تنبلی و تعریف متغییر ! ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
سرعت و بازدهی کدهای مختلف 2 - کاهش عملیات Boxing و Unboxing در کد ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
سرعت و بازدهی کدهای مختلف 3 - مصرف صحیح منابع و آزاد سازی به موقع ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
سرعت و بازدهی کدهای مختلف 4 - ساده سازی عبارات و استفاده از الگوریتم بهینه تر ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
سرعت و بازدهی کدهای مختلف 5 - کاهش انتقال اطلاعات در حافظه پشته ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
سرعت و بازدهی کدهای مختلف 6 - طراحی اشیای مناسب در 3DMax و استفاده صحیح از Texture ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
معرفی مفاهیم پایه ریاضی و ساختارهای مربوطه ... 1 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
معرفی مفاهیم پایه ریاضی و ساختارهای مربوطه ... 2 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
شروع برنامه نویسی و کدنویسی در محیط XNA ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
ترسیمات دوبعدی شناور روی صفحه (بخش اول) ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
ترسیمات دوبعدی متن (بخش دوم و پایانی) ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
ارائه یک سمپل سه بعدی ساده - Ship ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
چند سمپل - 1 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
چند سمپل - 2 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
معرفی کتاب های الکترونیکی 3 (فارسی) ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
معرفی کتاب های الکترونیکی 4 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
سرعت و بازدهی - کش دیتاهای مورد نیاز ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
انتشار XNA4 + سمپلی برای کلیک ماوس روی اشیاء ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
کنترل دوربین در فضای سه بعدی - بخش اول ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
معرفی کتاب های الکترونیکی 5 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
Kodu Game Lab ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

_H2_
20-07-2009, 01:02
سلام

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اشهد ان لا اله الا الله واشهد ان محمد رسول الله

مبعث پیامبر نور و رحمت، خاتم الانبیای الهی، وارث نوح(ع) و ابراهیم(ع) و موسی(ع) و عیسی(ع)، رحمت اللعالمین، محمد مصطفی(ص) بر تمام جهانیان مبارک باد.

========================================

Microsoft XNA یک لایه مدیریت شده بر فراز Microsoft DirectX است که اجازه تولید نرم افزارهای سه بعدی را به محیط CLR و زبانهای دات نتی میدهد.

بدیهی است که XNA به خودی خود هیچ پردازش سه بعدی انجام نمیدهد و تمام بار پردازش گرافیک بر عهده هسته DirectX است.

به کمک XNA میتوانید برنامه رایانه ای یا بازیهای تولید کنید که فعلا در چهار محیط در ویندوز و وب (به کمک Silverlight) و کنسول XBox و Zune قابل اجرا باشد.

اکثریت کدهایی که ما توضیح خواهیم داد در همه موارد فوق به سادگی کار خواهد کرد ولی برخی کدها از جمله کنترل ماوس و گرفتن فرامین ماوس و یا در صورت نیاز خواندن مستقیم یک فایل از مسیر مشخص هارد دیسک و... در XBox و Zune به مشکل میخورد و باید با کدهای مناسب تعویض شود که از حیطه بحث این تاپیک خارج است.

ضمن اینکه چنین به نظر میرسد که قدرت گرافیکی کنسولهای دستی Zune پایین تر از PC و کنسول XBox360 است.

(
برای تهیه یک نرم افزار مثلاً بازی که در همه محیطهای فوق قابل اجرا باشد، نیازی به NewProject های مختلف نیست و به جای این کار معمولاً از کامپایل های شرطی با دستوراتی مثل IF# (در هر دو زبان مذکور) استفاده خواهد شد تا با شرایط خاص هر کامپایل بخشی از کدها خودکار حذف و بخش دیگری فعال شود تا بتوان با یک کد واحد و کمی تغییرات برنامه یا بازی خود را برای همه محیطهای فوق عرضه کرد.
)


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(مجدد یادآوری میکنم که این تاپیک فقط در خصوض PC بحث خواهد کرد.)

==============

XNA ابتدا به صورت مشترک برای زبانهای VB.Net و C#.Net عرضه شد ولی نسخه های بعدی فقط برای C#.Net عرضه شد ...
اما به راحتی برای VB.Net و سایر زبانهای دات نتی قابل استفاده است ...

گرچه به ظاهر زبان کاری XNA زبان C#.Net است ولی جالب است که اگر جستجو کنید حتی سایتهایی پیدا میکنید که در خصوص طراحی بازی با XNA تحت Delphi.Net آموزش داده اند!

اصلی ترین تفاوت XNA که برای C#.Net نصب میشود، اضافه کرد قابلیت پذیرش Pipeline و فایلهای مرتبط در Visual Studio است.
Pipeline ها اجازه میدهند فایلهای مورد نیاز برنامه (تصویر و شی سه بعدی و صوت و افکت و...) در زمان کامپایل یک پردازش اضافه رویشان انجام شود و همه پسوندهای تصویری و شی و موسیقی بدون استثنا به فرمت و پسوند xnb.* تبدیل شوند.

این کار مزایای بسیاری دارد و ضمن افزایش انعطاف پذیری میتواند دیتاهای ورودی را در وضعیت بهینه و بهترین حالت و بالاترین سرعت در زمان اجرای برنامه اصلی قرار دهد و در اصل آن فایل را آماده استفاده در xna میکند تا در زمان اجرای برنامه اطلاعات به شکل مطلوب آماده باشند و دیگر کمترین پردازش ممکن مورد نیاز باشد ...
حتی تنظیماتی وجود دارد که xnb.* ها را قبل از ذخیره فشرده کند و باعث کاهش حجم عمومی پروژه نهایی شود.

در انتهای مطلب فوق این را هم اضافه کنم که به دلایل مختلف XNA بهترین گزینه VB.Net و C#.Net کارها در جهت تولید برنامه های سه بعدی است.

==============

برای برنامه های نوشته شده شما تحت XNA3.1 که در سایر رایانه ها اجرا شوند باید ...
1- حداقل پک انتشار Framework2.0 (به حجم حدود 25 مگ) نصب شود.
البته نیازی به نصب پک فوق در WinServer2008 و WinVista و Win7 نیست.

2- باید پک انتشار XNA3.1 (به حجم حدود 7 مگ) نصب شود.
با نصب پکیج کامل XNA (به حجم حدود 70 مگ) که برای VS نصب میشود Bootstrapper مربوطه هم برای استفاده در پروژه های msi و Setup نصب میشود و مشکل Setup سازی نهایی پروژه شما را در VS حل میکند.

(لینکهای دانلود مربوطه به صورت کامل در پست بعدی معرفی و لیست خواهند شد.)

==============

چند پست آتی به معرفی لینک های دانلود و شرایط نصب و منابع آنلاین و pdf و... اختصاص داده خواهد شد ...
(که نیاز به کمی جستجو و یافتن لینکهای مناسب دارد)

برای عزیزان VB.Net کار شخصاً دارم یک پک نصبی آماده میکنم که با توضیحات در پستهای بعدی خواهد آمد و کلا مشکل این دوستان را حل خواهد کرد ...
(که نیاز به کمی کار و کد نویسی دارد که با شروع مطالب VB.Net کارها هم در صورت تمایل بتوانند به موازات C#.Net کارها بحث را پیگیری کنند)

بعد از این 3 یا 4 پست مطالب آموزشی شروع خواهد شد.

========================================

قابل توجه دوستانی که توضیح کلی خواسته بودند.

=====


میتونیم اینجا نمونه پروژه های سه بعدی هم بزاریم؟
همانطور که گفتم ...


از دوستانی که فقط با شرایط "زیر ساخت" معرفی شده در بالا میتوانند و میخواهند مطالب و پست های آموزشی منطبق با این "زیر ساخت" قرار دهند تشکر میکنم و دستشان را به گرمی خواهم فشارد!

یعنی اگر سورس کدهای شما تحت VB.Net2008/C#.Net2008 و XNA3.1 است هر جایی از تاپیک خواستید لینک دانلود بدهید ...
یا حداقل حداقل VB.Net2005/C#.Net2005 و XNA2.0 ...

(
برای مثال شاید شما سورس خوبی در خصوص ارتباط یکی از این دو زبان با DirectX Management داشته باشید ولی طبیعتاً کد شما با کلاس و متدهای مختلفی کار میکنید که با بحث و شرح تاپیک متفاوت خواهد بود.

البته این قبیل سورس ها هم مفید هستند ولی پیشنهاد میکنم اگر XNA نیست تاپیکی مجزا بزنید و همه را معرفی کنید، من هم میتوانم در جهت پیوستگی مطالب لینک تاپیک شما به عنوان "نمونه کدهای برنامه نویسی سه بعدی غیر XNA" در پست اول همین تاپیک جاری اضافه کنم.
)

البته با گذشت سالها سمپلهای XNA هم خیلی زیاد شده که دوستان میتوانند سمپل ها و اموزش و فیلم و... را در سایت creators.xna.com پیدا کنند.
که البته همانطور که گفتم در پستهای آتی این لینک ها معرفی خواهند شد.

=====

از کلیه دوستانی که اقدام به ارسال نظرات و پیشنهادات سازنده خود کرده اند تشکر میکنم.
پیشنهاداتی مطرح شد که عموماً در سطح PM بود و جای تشکر مجدد دارد ...
همانطور که قبلاً حدس زده بودم تعدادی از این مطالب چیزهایی خواسته بودند که خود من قصد داشتم در پستهای بعدی آنها را مطرح کنم.
همچنان آماده دریافت پیشنهادات دوستان در PM هستم.

==============

شب خوش!

_H2_
20-07-2009, 09:03
سلام مجدد
این روز تعطیلی و گرامی فکرم کمی باز شد ... !
یک توضیحات مفید دیگری به ذهنم رسید که اول میخواستم پست قبلی را ویرایش کنم ولی اینطور دیدم که چون بین دو پست زمان زیادی گذشته، شاید خیلی از دوستان پست را مطالعه کرده باشند و از ویرایش آن و توضیحات بیشتر بیخبر بمانند ، پس گفتم تا دیر نشده پست جدیدی بزنم ...

========================================

در واقع XNA خیلی شبیه خود Framework است، چیز عجیب غریبی نیست!
یک مجموعه از کلاسهای آماده است که حدودا (و کیلویی !) یک سوم Framework2.0 میشود به پروزه شما Reference میشوند و شما میتوانید از آن کلاسها و متدها استفاده کنید.
خود XNA هم با زبانهای دات نتی VC++.Net و C#.Net نوشته شده است، پس کاملاً برای استفاده در دات نت مجهز و آماده و یک دست است ولی برای سایر زبانها و محیطهای غیر دات نتی قابل استفاده نیست.
(
البته محصول مشابه و غریب مانده ای برای VC++2005/2008-Native از سوی مایکروسافت عرضه شد ولی باز هم حداقل محیط کدنویسی زبانهای دات نتی معمولاً هوشمندی بیشتری دارد و به برنامه نویس اش خیلی کمک میکند و کدهای مطلوب رال پیشنهاد میدهد.
)

XNA مثل سایر برنامه های بازی سازی و گرافیکی نیست! هیچ رابط کاربری سفارشی ندارد ....
یعنی نه مثل برنامه برنامه درپیتی مثل Game Creator است و
نه مثل برنامه قدرتمندی مثل 3DMax است !
منظورم آن است که پس از نصب نباید انتظار هیچ واسط کاربری داشته باشید، فقط کدنویسی!

(
البته اگر XNA میخواست واسط گرافیکی و کاربری هم برای طراحی صحنه و اشیا و... داشته باشد، در نهایت نمیتوانست با قولهایی مثل 3DMax و Maya رقابت کند.
در نتیجه به جای موازی کاری و مسخره بازی، فقط کلاسهای مورد نیاز را شامل میشود و در دو فرمت x و fbx اجازه تعامل با نرم افزارهای قدتمند گرافیکی سه بعدی را میدهد و شما میتوانید از واسط کاربری پیشرفته انها در جهت طراحی اشیای مورد نیاز خود استفاده کنید و سپس این اشیا را در کدهای XNA استفاده و نمایش دهید.
)

ولی چون طبق رسم معمول Framework تهیه شده و در اصل از آن استفاده میکند و آن را هم در بخش سه بعدی تکمیل میکند، ذات کدنویسی ساده تری نسبت به سایر محیطهای کدنویسی سه بعدی دارد که انشا ا... خواهید دید.

این سادگی تا جایی رفته که در اینترنت افرادی را میبینید که بدون دانش درست و حسابی از زبان برنامه نویسی C#.Net توانستند چیزهای خیلی ساده ای تولید کنند ولی طبیعتاً استفاده از حداکثر قدرت و نیز نوشتن کدهای پرسرعت نصیب کسانی میشود که برنامه نویسی تحت دات نت را درک کرده باشند و به زبانهای مربوطه تسلط کافی داشته باشند تا بتوانند از مفاهیم قدرمتد برنامه نویسی مثل شی گرایی و پلیمورفیزم و برنامه نویسی چند لایه در کدشان استفاده کنند و نیز تشخیص بدهندچه کدی در چه مکانی باعث کاهش بازدهی و سرعت برنامه خواهد شد و چه کدی (هرچند به ظاهر ساده تر باشد) فشار زیادی به برنامه و منابع سیستم عامل وارد میکند و سرعت و بازدهی را کاهش میدهد.

البته خوشبختانه تاپیک در تالار Framework و در جمع برنامه نویسان است. :10:

==============

صبح ساعت 10 ایتان هم بخیر!:31:

_H2_
21-07-2009, 00:09
سلام
کسانی که تمایل به دیدن و نوشتن سورس کدها و کامپایل انها و اجرای exe های نهایی دارند

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
- دوستانی که تمایل دارند از VB.Net استفاده کنند باید C#.Net را هم نصب کنند.
- افرادی که نسخه ای از Visual Studio 2008 را نصب دارند، فقط کافی است آخرین پک لیست فوق را دانلود و نصب کنند.

==============

کسانی که فقط میخواهند exe های نمونه کدهای احتمالی ارائه شده را اجرا کنند و ببینند:
(و نیز قابل توجه دوستان برای ساخت Setup)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
- یعنی افرادی که سیستم عامل ویستا دارند فقط باید آخرین پک لیست فوق را دانتلود و نصب کنند.

==============

منابع و مراجع آنلاین برای XNA:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
- دوستان میتوانند حجم قابل توجهی از سمپل و آموزش و فیلم و... را در سایت creators.xna.com پیدا کنند.

==============

خوش بگذره!

عــــلی
21-07-2009, 13:02
سلام و خسته نباشید به داش حسن عزیز...
حال شما خوبه برادر...ما که همیشه از شما استفاده های مفیدی بردیم باز هم میبریم و این افتخاریست برای ما که در خدمت شما باشیم.

یه پروژه براتون اوردم که با کامپوننت های زیر کار میکنه:
Microsoft.DirectX
Microsoft.DirectX.Direct3D
Microsoft.DirectX.Direct3DX
Microsoft.DirectX.DirectDraw
Microsoft.DirectX.DirectInput

این پروژه یک عکس رو میگیره و اون رو به صورت سه بعدی در میاره که شما با کلید های چپ و راست و بالا و پایین میتونین اونو در نمای مورد نظر بچر خونین:
نوشته شده به زبان سی شارپ:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]سی شارپ(#C) پروژه + دانلود:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

منبع: CodeProject.com

موفق باشید و سربلند.

mohsen_3
21-07-2009, 18:44
علی جان اینجا واسه Xna ست و تاپیک اموزشی بهتره این جور چیزها رو جای دیگه بزارید

_H2_
22-07-2009, 02:17
سلام
با توجه به تمرکز تاپیک بر روی XNA و نسخه 3 لینک pdf سایر نسخه های قدیمی ارائه نخواهد شد.
لینک های دانلود در لحظه ارسال این مطلب سالم هستند و تضمینی روی صحت لینک ها در آینده نخواهم داد.
(با توجه به جدید بودن نسخه ها، با شکایت ناشر هاستیگ لینک را حذف خواهد کرد.)

نسخه جدید کتابهای الکترونیک پیشنهادی:



Beginning XNA 3.0 Game Programming
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]


rapidshare.com/files/240866981/BR-0315-BXNA3.0GP.rar
(9 مگ خود کتاب است و 14 مگ فشرده هم حاوی 11 سمپل کتاب است)






Learning XNA 3.0
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]


rapidshare.com/files/208251570/Learning_XNA_3.0_[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]






XNA 3.0 Game Programming
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] Programming Recipes.gif


rapidshare.com/files/238201586/XNA3.rar


==============

قابل توجه دوستانی که pdf خواسته بودند.

dogtag
22-07-2009, 04:50
لینک اول ایز دِد!

_H2_
22-07-2009, 10:52
سلام

لینک اول ایراد دارد.
من دقیقاً دیشب بعد از ارسال پست هر دو لینک را چک کردم و درست بود ...
ولی متاسفانه آپدیت نگاه داشتن لینک های دانلود فیلم و نرم افزار و pdf های جدید و به روز کمی مشکل است.
چون جدید است شرکت یا ناشر روی مسئله حساسیت دارد و سعی در پیدا کردن موارد آپلود شده غیر مجاز میکند و با شکایت به هاست و طبق قانون کپی رایت، هاست را موظف به حذف فایل مورد نظر میکند.

=====

بحرحال قبل از آنکه من بخواهم و جستجو کنم و لینک جدید و معتبری پیدا کنم، جناب کاربر CHAPTER ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) طی یک پیام خصوصی لینک جدید و یک کتاب جدید ارائه کردند که ضمن تشکر از ایشان، لینک پست قبلی اصلاح و لینک جدید هم اضافه شد.

دوستانی که تمایل به همکاری در مفیدتر شدن تاپیک را در جهت "زیر ساخت" بیان شده در پست اول دارند (یعنی XNA3 و C#/VB2008) نیازی به ارسال پیام خصوصی نیست و میتوانند پست آموزشی و مفید خود را در این جهت با نام خودشان ارسال کنند.

=====

دو پست بعدی به حل مشکل VB.Net کارها و یک سری مطالب نهایی قبل از شروع مطالب اختصاص دارد که انشا ا... بعد از این دو پست اصل مطالب آموزشی خود تاپیک شروع خواهد شد.
ضمن اینکه برای دوستانی که صبر کمتری دارند، بدون هیچ توضیحی یک سمپل ساده هم ارائه خواهد شد البته این سمپل ... !

=====

موفق باشید.

M E H D I
22-07-2009, 13:26
این هم دو تا PDF دیگه با اجازه _H2_ عزیز! البته یه خورده قدیمی تر هست.

Professional XNA Game Programming: For Xbox 360 and Windows

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حجم حدود 27 مگ
______________________
اینها هم همون سه تا کتابی هست که معرفی شدن. به عنوان Mirror گذاشتم.

Microsoft(R) XNA(TM) Unleashed: Graphics and Game Programming for Xbox 360 and Windows

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حجم حدود 39 مگ
_____________________
Learning XNA 3.0: XNA 3.0 Game Development for the PC, Xbox 360, and Zune

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حجم 4 مگ
_____________________
XNA 3.0 Game Programming Recipes: A Problem-Solution Approach (Expert's Voice in XNA)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حجم 2 مگ
____________________
Beginning XNA 3.0 Game Programming: From Novice to Professional (Beginning from Novice to Professional)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

_H2_
22-07-2009, 14:12
سلام

... اونها رو حذف کنید
به نظرم حذف پست دیگران کار جالبی نیست!


که Ebook ه Microsoft XNA Unleashed که یا مال SAMS بود با Microsoft و فکر کنم مال 2009 یا این طرف ها هست رو پیدا کنید و لینک بدید
قبلاً یک لینک دانلود داشتم ولی لینک شکسته و نامعتبر شد، کمی هم سعی کردم موفق شدم چندین لینک نسخه قدیم 2007 پیدا کنم، امروز و با پست شما مجدد سرچی کردم و یک لینک سالم پیدا کردم.

لینک مذکور به پست قبلی اضافه شد.

dogtag
22-07-2009, 15:17
مرسی ولی لینک اینیکی هم ایز دِد.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هم بعد از unrar کردن های مکرر، ناقص بوده و CRC آن مطابق نسخه اصلی نبود!

CHAPTER
22-07-2009, 16:29
دیدم دوستان منابع انگلیسی ریاد معرفی کردندجای منبع فارسی خالی هست براتون این pdf رو گذاشتم
البته متاسفانه یا خوشبختانه منبع فارسی زیادی برای xna وجود نداره ولی تا شروع مبحث اصلی توسط دوستمون _H2_ می تونید با مطالعه این pdf یه جورایی برای بحث اصلی آماده بشیم
با تشکر از همه


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]



لینک دانلود مستقیم :




برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


راستی این pdf ترجمه بخشی از مطالب سایت



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


که می تونید آموزش کامل رو توی سایت ببینید

_H2_
23-07-2009, 09:57
سلام

دوستانی که میخواهند با VB.Net کار کنند قابلیت Pipeline ها را و تبدیل فایلها یه xnb.* را به صورت عادی در محیط Visual Studio نخواهند داشت و یکسری مشکلات ریز دیگر هم خواهند داشت ولی نگرانی وجود ندارد ...
همانطور که قبلاً هم گفتم سایت هایی هم در ضمینه Delphi.Net در این خصوص فعال هستند.


برای رفع مشکل این دوستان من یک پک را آماده کردم که با نصب این پک مشکل از جهات مختلف تا حدود زیادی حل میشود.
در این بسته بسیاری تنظیمات ریز و درشت برای NewProject-XNA لحاظ شده که میتواند حداکثر هماهنگی VB.Net را با XNA و ابزار توسعه آن و استفاده در شرایط گوناگون ایجاد کنند.

دوستان VB.Net کار باید از این پک استفاده کنند و بعد از NewProject تنظیمات پروژه مذکور را تغییر ندهند.

==============

- نام این پک Install_XNA_VB و نام فایل Install_XNA3.1_VB9.0.exe است
- پس از نصب VS و XNA3 میتوانید اجرایش کنید.
- هیچ ضرری ندارد و برای #C کار ها هم تفاوتی ایجاد نمیکند
- خودکار و سریع عمل میکند و هیچ دیالوگ خاصی ندارد و منتظر فرم و Next و چیز خاصی نباشید!

لینک دانلود اختصاصی این پک به حجم حدود 40 کیلو بایت
support.h02.ir/fwlink/?LinkId=1005960377
یا
h02.ir/Downloads/?familyid=5D990F13-4128-444F-A8F8-E2DC0EEF5243

در حال حاضر و با توجه به کوچک بودن پک فوق، این فایل به بسته مختص این آموزش که لینک دانلودش در پست اول آمده هم اضافه شده و از طریق لینک دانلود پست اول هم قابل دانلود است.

==============

شروع یک پروژه جدید عادی XNA برای زبان C#.Net

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
- با این کار یک پروزه exe به همراه یک پروژه درونی Content ساخته میشود ...
- برنامه نویس میتوانید این Content را حذف یا تغییر نام بدهد و نیز در صورت نیاز میتواند چندین Content دیگر هم به پروژه خود اضافه کند.

==============

شروع یک پروژه جدید عادی XNA برای زبان VB.Net (البته بعد از نصب پک معرفی شده)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

- با این کار فقط یک پروژه exe ساخته میشود و برنامه نویس باید به دلخواه خود و به تعدادی که میخواهید Content را هم جدا بسازد که البته معمولاً یکی کافی است.

یعنی پس از NewProject فایل exe دستورات زیر را هم برای داشتن یک Content پیگیری کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی دو نکته را دقت کنید ...
1- بهتر است نام پروژه را به جای پیشفرض Content1 نام Content قرار دهید (وگرنه باید کد را هم تغییر دهید)
2- حتماً حتماً حتماً پروژه های Content را در پوشه ای بسازید که فایلهای exe اصلی مثل vbproj و Game1.vb و Program.vb و... قرار دارند ...
(انجام این عمل بسیار ضروری است و برای صحت کارکرد پروژه لازم است.)

اینکار به صورت خودکار برای C#.Net انجام میشود ولی VB.Net کارها با این پکی که من دادم باید خودشان یک بار در شروع پروزه جدید حواسشان به این مطلب باشد.

یعنی مثلاً اگر فایل vbproj و یا Game1.vb در مسیر C:\AAA\BBB\CCC\Game1.vb قرار دارد، شما باید پروژه Content را در مسیر C:\AAA\BBB\CCC بسازید.

==============

با توجه به زیاد بدون سمپلهای XNA به زبان #C، دوستان VB کار میتوانند از سایتهای زیر برای تبدیل آنلاین کد بین دو زبان #C و VB استفاده کنند.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و...

========================================

فعلاً برای آن دسته از دوستان که کم کم دارند صبر خود را از دست میدهند یک مثال ساده دو بعدی معرفی میکنیم! (بدون هیچ توضیح و شرحی)
(یک چیز تو مایه های قارچ خور آتاری های قدیم ولی یکم دولوکس تر! همان دستگاه های سیاه با دسته گوشکوب های دو دکمه ای ... !)

- exe این سمپل حدود 400 کیلو بایت است ولی بیش از 11 مگ حجم فایلهای گرافیکی و صوتی و... است!

- پروژه خیلی ساده و دوبعدی است ولی مطلب آموزشی دارد.

- در HighResolutionContent و Levels میتوانید فایلهای هر مرحله را مشاهده و ویرایش کنید و یا فایل جدیدی برای یک مرحله جدید با شکلی که شما میخواهید ایجاد کنید!
(
در فایل متنی مرحله ...
کاراکتر "1" نقطه شروع است
کاراکتر "X" نقطه پایان است.
کاراکتر "#" و "-" دو نوع سکو هستند.
کاراکتر "A" و "B" و "C" هم دشمن است (یک اسکلت عصبانی و... !)
)

گرچه دوبعدی است ولی پیشنهاد میکنم حتماً ببینید.

===== شروع سمپل برای C#.Net

این پروژه خودکار با XNA3 در VS اضافه میشود.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
- البته باید در دیالگوی که باز میشود ورژن Framework3.5 را انتخاب کنید تا پروژه نمایان شود.

===== شروع برای VB.Net

سورس تبدیل شده پروژه فوق به VB.Net را میتوانید از لینک زیر دانلود کنید:
rapidshare.com/files/258892639/XNA3.1_VB9.0_Platformer.rar
این پک حدود 9 مگ است و کامل و آماده کامپایل و اجرا است.




برای افرادی که میخواهند سورس VB را هم ببینند ولی دانلود 9 مگ برایشان سخت است، فایل دیتا را حذف کرده ام، که باید آن را از یک پروژه C#-Platformer مجدد کپی کنند، در عوض حجم به حدود 190 کیلو بایت رسیده.

حتماً قبل از اجرای این پروزه بدون فایلهای دیتا فایل توضیحی Help_ReadMe را به دقت خوانده و عمل کنید.
rapidshare.com/files/258987753/XNA3.1_VB9.0_Platformer_Small.rar

==============

کمی لذت ببرید!

mohsen_3
23-07-2009, 12:54
اقا می شه یکم در مورد ساخت بازی های تحت شبکه با Xna توضیح و اموزش بدید.

_H2_
25-07-2009, 13:12
سلام
لطفاً حتماً بخوانید تا بعداً مباحث برایتان مبهم و گیج کننده نشود و سوالی پیش نیاید ...

اکثریت کدهای XNA که خواهید یافت برای سادگی و کم کردن تایپ namespace ها را import و دیگر از تایپ انها خودداری کرده اند ...
ولی من شخصاً نمیتوانم با حذف namespace کنار بیایم و از این کار بشدت بدم می اید !!!

مثلاً شاید در جایی شما کدهای این تیپی زیاد ببینید ...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولی من شخصاً کد زیر را ترجیح میدهم! هر چند کدنویسی بیشتری داشته باشد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و اما راه حلی که نه زیاد تایپ بخواهد و نه namespace را حذف کند (و من هنگ کنم!):

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همانطور که بهتر از من میدانید ...
این سینتکس نام درج عبارت XNA را برابر فضای Microsoft.Xna.Framework قرار خواهد داد.
هم تایپ کمی دارد و هم namespcae حذف نشده و تعلق کلاس کاملاً مشخص است.


این سینتکس را در کل این تاپیک هم حفظ خواهم کرد
و اگر مثلاً جایی گفتیم کلاس XNA.Graphics.Texture2D
منظور کلاس Microsoft.Xna.Framework.Graphics.Texture2D خواهد بود.


امیدوارم دوستان این پست را به دقت خوانده باشند و مطمئن باشند که متوجه مطلب شده اند.

==============


اقا می شه یکم در مورد ساخت بازی های تحت شبکه با Xna توضیح و اموزش بدید
این بحث و چند بحث دیگر به علت آنکه تاپیک آموزش مقدماتی است، جزء "هدف " تاپیک نبوده، حالا اجازه دهید به اهداف مشخص شده برسیم و چیزهایی روی مانیتور بیاید، سپس اگر شد به مباحث پیشرفته تر هم خواهیم پرداخت.


رو لطفا برای دانلود دوباره لینک بدین
من جملات بعدی تان را درست متوجه نشدم،ولی به نظر میرسد لینک شکسته و دیگر صحیح نیست.
چشم یک جستجویی میکنم، با پست بعدی لینک جدید خواهم گذاشت.

خوب از پست بعدی مطالب آموزشی شروع خواهد شد که انشا ا... با صبر دوستان به نتیجه خواهد رسید!
(هم باید بر روی مسائل فکر شود و هم بعضاً اشکالی مناسب برای فهم مطالب تهیه شود ... ولی انشاا... به مرور زمان و با کمک دوستان "اهداف" را تامین خواهیم کرد.

_H2_
28-07-2009, 01:29
سلام
همانطور که میدانید در فضا و محیط نمایشی سه بعد داریم که این ابعاد به صورت پیشفرض چیدمانی طبق شکل زیر دارند:
یعنی اگر روبروی مانیتور باشید بردار X در جهت راست و بردار Y در بالا Z مثل یک پیکان از سمت مانیتور به سمت شما بیرون امده (حواستان باشد زخمی نشوید!!!)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مثلاً با کم کردن Z یک شی سه بعدی میتوانید آن را از دوربین دور کرده و به عمق ببرید.
نکته بسیار مهم ان است که دید شما از این جهت وابستگی مستقیم به محل و هدف و زاویه دوربین دارد!

یعنی شما منظره خود را درون مانیتور از با توجه به محل جاری دوربین + محلی که دوربین به آن نگاه میکند + زاویه دوربین خواهید دید!

تصور کنید، دوربین بالای محور Y است و به سمت پایین نگاه میکند ...
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

فکر کنید ...چه خواهید؟ با تغییر X و Y و Z اشیای موجود در صحنه، اشیا به کدام سمت مانیتور خواهند رفت؟

مشخص است در این حالت Y است که از مانیتور بیرون زده و مثلاً با کم و زیاد کردن Y یک شی، ان شی به عمق رفته و یا به دوربین نزدیک تر و بزرگتر میشود!
(یعنی درست برخلاف گفته قبلی من)

پس جهت در فضا نسبی است و چیز مطلقی وجود ندارد ...
یعنی شما باید بتواند بجز دید دوربین که روی مانیتور خواهد بود، یک دید جهانی هم داشته باشد، که از آن منظر در ذهن خود بتوانید خود دوربین را هم ببینید ...

دوربین میتواند در هر جایی در فضا باشد و اصلاً هم نیاز نیست روی یکی از محور های اصلی و به سمت انها باشد ...
هرجایی باشد و به هر سمتی نگاه کند!

پس در عمل نمیتوان گفت سمت راست مانیتور فلان محور است و سمت بالا ان یکی محور است!
شما باید برای کنترل و حرکت دوربین به سمت راست و چپش به جای کم و زیاد کردن مستقیم X و Y و Z آن، محاسبات برداری انجام دهید و گرنه با کنترل دوربین به شدت مشکل خواهید داشت ...

در زمان مناسب یک پست اختصاصی در خصوص پارامترها (13 عدد تاثیر گذار بر دید) و کنترل دوربین در فضای سه بعدی خواهیم داشت.

=====

در این میان یک قانون ریاضی به نام "قانون و روش دست راست" وجود دارد که در محاسبات ریاضی خیلی به کار می آید و کمک میکند.
این روش به راحتی میتواند در شرایط خاص برای سه بردار در سه جهت و تشخیص سمت بردار سوم استفاده شود.

برای اینکار باید دست را صاف در راستای بردار اول گرفت طوری که انگشتان بتوانند به سمت جهت بردار دوم خم شوند، در این حالت انگشت شست جهت بردار نتیجه و سومی را (حاصل ضرب خارجی بردار اول در دوم) نشان خواهد داد.
در جایی که میتوان جهت برداری را به کمک دو بردار دیگر به دست اورد، این مطلب بیان خواهد شد و فعلاً باید اصول این کار را بلد باشید.

همانطور که در شکل زیر میبینید ...
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دست در راستای محور X است و انگشتان در راستای محور Y و نتیجه انکه انگشت شست جهت بردار Z را نشان خواهد داد از آزمایش فوق حداقل حداقل خواهیم فهمید که ....
جهت و سمت ضرب خارجی بردار X در بردار Y برابر خواهد بود با جهت و سمت بردار Z
جهت و سمت ضرب خارجی بردار Y در بردار X برابر خواهد بود با عکس جهت و سمت بردار Z

در زمان مناسب یک پست اختصاصی در خصوص مباحث ریاضی و هندسه سه بعدی خواهیم داشت.
(فعلاً بد نیست سعی کنید و این روش را حداقل با خود سه بردار اصلی و ترکیبهای مختلف امتحان کنید)

=====

یک سری تصاویر دو بعدی هم دارید که بعضاً روی مانیتور شناور خواهند بود و تغییر دوربین روی انها اثری ندارد.
از جمله این ترسیمات دو بعدی میتواند به پنل های کنترلری بازی ها در اطرف صحنه اصلی اشاره کرد، مثل نمایش میزان تیرها و نمایش نقشه و...

برای ترسیمات دوبعدی XNA که در عمق قرار نمیگیرند و روی کار نهایی شما شناور خواهند بود محورهای مختصات مطابق شکل زیر خواهند بود:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

مثلاً با زیاد کردن X یک تصویر شناور دو بعدی، آن تصویر به سمت راست مانیتور حرکت خواهد کرد.
نکته مهم ان است که این تصاویر روی صفحه مانتیور شناور هستند و وابسته به محل و جهت دید دوربین نیستند، مثل یک برچسب که روی لنز دوربین چسبانده باشند!

=====

البته میتوان تصاویر را وابسته به موقعیت دوربین هم کرد و از آنها برای پوشاندن کف و دیوار و آسمان و... استفاده که در این حالت موقعیت راسهای محل نمایش در مختصات فضایی سه بعدی سنجیده خواهد شد ولی چیدمان تصاویر پوشانده شده روی صفحه ای مثلث یا مستطیلی که حضور دارند یک دستگاه دو بعدی خواهد بود که انشا ا... در جای مناسب بحث خواهد شد.

==============


چشم یک جستجویی میکنم، با پست بعدی لینک جدید خواهم گذاشت.
متاسفم، شرمنده، تقریباً بهترین کلمات و فیلترها را در گوگل استفاده کردم و تمام نتایج را بررسی کردم ولی متاسسفانه لینکی پیدا نکردم.
شاید چند ماه دیگر چند لینک دانلود پیدا شود.

IP007
28-07-2009, 09:10
سلام، ولی فکر کنم z محور بالایی باشه و y سمت چپی

_H2_
31-07-2009, 16:09
سلام
این مسئله بسیار مهم است ولی واقعاً یک پست برای آن کافی نیست و به همین دلیل هم اصلاً نمیخواستم وارد این بحث شوم...
ولی با پیشنهاد یکی از دوستان و توجه به این نکته که تعداد زیادی از افراد ا سرعت و بازدهی کدهای خودشان در XNA مشکل دارند، تصمیم گرفتم هر چند ناقص حداقل یک پست را به این مطلب اختصاص دهم.

اول لازم میدانم متذکر شوم که رعایت اصول بازدهی و سرعت در برنامه های سه بعدی بسیار بسیار مهم تر از هر محیط دیگری است، چون برنامه در یک حلقه بینهایت با یک تعداد مشخص فریم در ثانیه (مثلاً حدود 60 فریم در ثانیه) تمام عملیات های لازم را مجدداً انجام میدهد و با توجه به تعداد اشیای در صحنه و تعداد مثلث های مصرف شده و... خود برنامه شما و نیز هسته DirectX و کارت گرافیکی باید حجم زیادی از اعمال را انجام دهد و کوچکترین بیدقتی پردازشی میتواند تاثیرات مخربی در سرعت و بازدهی عمومی برنامه بگذارد.

نکته بعدی آنجا است که شما همواره هم باید مراقب کد نویسی مستقیم خودتان باشد و هم کدنویسی داخلی ناپیدا توابع آماده.

در صورت رعایت صحیح نکات و کدنویسی خوب با XNA میتواند به حدود 70 درصد سرعت برنامه های سه بعدی VC++,DirectX برسید که سرعت و بازدهی مناسبی است به سادگی و سرعت تولید محصول XNA و زبانهای VB.Net و C#.Net در مقابل ++VC و DirectX می صرفه!

اصلی ترین موارد کاهش سرعت و بازدهی به ترتیب چنین هستند:

==============

----- رابطه خصاصت و تنبلی و تعریف متغییر !

=====

اصولا مسئله این است که کار باید انجام شود و کسی نمیگوید که دستور باید حذف شود ولی باید از تکرار عملیتهای موازی و مشابه جلوگیری کرد و حاصل انجام یک عملیت را بارها مورد استفاده قرار داد و مجدد بار تولید ان نتیجه را به برنامه تحمیل نکرد.

ساده ترین کدهای خصاصت میتواند چیزهایی شبیه این باشد ...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

موارد بدتر و وحشتناک تر میتواند چنین باشد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

دقت کنید که ارجاع به یک آیم مجموعه یک خط دستور ساده نیست ...
مواردی کلید String و بیشتر تایپ های دیگر را دارند در ذات دو حلقله for تو در توی سنگین را به برنامه شما تحمیل میکنند ...
حلقه اول تک تک عناصر مجموعه کلید را با کلید داده شده شما چک میکند تا عنصر دلخواه شما را پیدا کند و حلقه دوم که کمتر به آن دقت و توجه میشود حلقه ای است که تک تک کاراکترهای دو String را با هم مقایسه میکند تا بفهمد دو String برابر هستند یا خیر ...

در واقع دسترسی به عناصر یک مجموعه معمولاً یک اسکن حجیم را به سیستم تحمیل میکند تا عنصر مورد نظر پیدا شود.

در مواردی که این مجموعه ثابت است بهتر است اشاره گر عنصر مربوطه فقط و فقط یک بار در برنامه به دست آورده و در متغییری محلی در سطح کلاس ذخیره کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

نوع دیگری از مسئله فوق خود را در حلقه های for و while و... آشکار و پنهان نشان میدهد ...

دستوری که در داخل حلقه نوشته میشود یک خط نیست، به معنای انکه شاید به نظر شما یک خط باشد ولی اگر حلقه 100 بار تکرار شود آن یک خط شما 100 بار اجرا میشود و معادل 100 خط کدنویسی فشار به برنامه تحمیل میکند.

حلقه های آشکار for و while هستند که ما داریم و حلقه های پنهان جایی هستند که ما نمیبینیم مثل حلقه for ای که یک مجموعه را برای پیدا کردن عنصری جستجو میکند یا حلقه while که Game.Update کد قبلی را مدام و تا انتهای برنامه اجرا میکند.

شما اگر یک عملیات و یک خط کد را از داخل حلقه ای کم کنید و در عوضش مجبور شویبد 10 یا 20 خط کد خارج آن حلقه اضافه کنید (تا آن یک خط داخل حلقه کم شود) باز هم سود کرده اید !!!
چون یک خط داخل حلقه با 100 بار معادل 100 خط کد نویسی را به برنامه تحمیل میکند و در حالی 10 یا 20 خط خارج حلقه همان 10 یا 20 خط است.

مثال قبلی هم در مبحث گفتاری الآن میگنجد ...
در مثال قبلی هم ما با یک تعریف متغییر کد جستجوی یک مجموعه را از متد مادام الاجرای Game.Update به متد یکبار اجرا شوند Game.LoadContent منتقل کردیم و جالب آنکه دیگر بحث حلقه 100 یا 200 دوری نیست! متد Game.Update نزدیک 60 بار فقط در هر یک ثانیه میتواند اجرا شود (کری به دقیقهع و ساعت نداریم) و یک عملیات کمتر ما نتیجه 60 عملیات کمتر در هر ثانیه را بر عهده دارد.

(بگذریم که خود جستجو در یک مجموعه برای یافتن یک عنصر هم همانطور که قبلاً بیان شد یک عملیات ساده نیست و خودش دو تا حلقه تو در تو است!!!)

به علت حجم زیاد نوشته ها مبحث "سرعت و بازدهی کدهای مختلف" در پست بعدی و انشا ا... قبل از 24 ساعت باز مطالب ادامه می یابد ...
(خیلی سعی کردم zip کنم ولی این مبحث را هر جور zip میکنی بازم بیرون میزنه!)

==============


ولی فکر کنم z محور بالایی باشه و y سمت چپی
طبق مستندات، سیستم مختصاتی XNA همان است که در پست قبلی درج شد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

میتوانید برای اطلاعات بیشتر به منابع آنلاین معتبر معرفی شده در پست 8 زیر مراجه کنید و اگر احیاناً مطلب قابل توجهی پیدا کردید منتشر کنید.

مجدداً تاکید میکنم که دید شما روی صفحه مانیتور وابسته به موقعیت فعلی خود دوربین (و 13 پارامتر ان) در مختصات جهانی XNA میباشد.

_H2_
31-07-2009, 20:11
سلام مجدد ...
(قولش را قبل از 24 ساعت داده بودم ولی خوب زودتر حاضر شد:31:)

==============

----- کاهش عملیات Boxing و Unboxing در کد

عملیات boxing و unboxing یک عملیات داخلی فریم وروک است که برای برنامه نویسان C#.Net و VB.Net خودکار انجام میشود و اصلاً متوجه آن نمیشوند (ولی مثلاً برنامه نویسان VC++.Net مجبوراً صراحتاً دستور مربوطه را بنویسند)

دات نت زبانی کاملاً شی گرا است و تا انجا پیش رفته که Struct های ان نیز مطابق اصول شی گرایی هستند ...
تمام Struct های دات نت وراثتی هستند از System.ValueType و آن هم وراثتی است از System.Object

بدین ترتیب سلسه مراتب وراثتی برای Struct ها هم تامین شده که گاهاً میتواند باعث تعجب برنامه نویسان سایر زبانهای شی گرایی گردد.

این کار محاسن زیادی دارد و اجازه شی گرایی یکپارچه را در زبان برنامه نویسی میدهد و خیلی خوب است .

ولی اصول مدیریت داخلی حافظه برای Struct ها با Class ها بسیار بسیار فرق دارد و این در اصل سرچشمه تفاوت این دو ساختار است که من قصد و وقت تشریح ان را ندارم و تاثیری هم در کد ما ندارد.

نکته ای که مهم است ان جا است که دات نت چطور میتواند یک Struct را با یک سیستم مدیریت حافظه متفاوت در یک Object که Class است جای دهد؟؟؟

کنترل این عملیات به صورت خودکار بر عهده محیط CLR است و نام این عملیات box و unbox است.

عمل boxing چیزی شبیه این است ... (شبیه است ولی این طوری نیست!)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که طی آن یک struct (مثل value1) به یک class (مثل value2) تبدیل میشود.


عمل unboxing چیزی شبیه این است ... (شبیه است ولی این طوری نیست!)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که طی آن یک struct که داخل یک object است (مثل value2) به یک struct واقعی و آزاد (مثل value1) تبدیل میشود.

نکته مهم و قابل توجه انجا است که عملیات فوق بسیار بسیار پرسرعت و با بازدهی بالا است و اصلاً با کدهایی که دیدید برابر نیست و مستقیم و با سرعت بالا توسط هسته CLR انجام میشود و در هر اجرای یک کپی بسیار کوچک اطلاعات به حجم Struct هم رخ میدهد.

ولی با وجود پرسرعت بودن، انجام عمل فوق در یک حلقه عظیم میتوانید باعث افت سرعت شود،
مجدد تاکید میکنم که حلقه ای 100 بار انجام شود سرعت را 100 برابر کاهش میدهد و حلقه 1000 و 10000 و ... هم جای خود و در نهایت افزایش صفر مشکل ساز میشود.

کد عملی مثل این نمونه از boxing و unboxing است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته کد فوق به ذات مشکل خاص سرعتی ندارد ولی در حلقه ای که چند صفر ناقابل به ان اضافه کند ... !

ولی کد زیر اصلاً boxing و unboxing نیست : (گرچه ظاهرش یکسان است!)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

چون کد اول Integer بود و Integer یک Struct است ولی String خودش یک Class است و نیازی به boxing ندارد.

نتیجتاً شما باید تا حد امکان از پاسکاری Struct ها به Object ها جلوگیری کنید.

=====

همانطور که اول گفتم شما باید مراقب کدنویسی داخلی ناپیدا توابع آماده هم باشید.
مثلا کد ساده زیر را در نظر بگیرید ...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

یک کد ساده مختصر مفید و در اصل یک خطی برای مرتب کردن عناصر یک آرایه ... فقط یک خط ! (فقط تک خط آخری)
حالا اگر بگم تک خط کد فوق در بدترین شرایط باعث ...
- دو حلقه تو در تو مقایسه با حدود 130 هزار مقایسه ...
- 260 هزار box ...
- 260 هزار unbox ...
- جابه جایی و انتقال نزدیک 2MB اطلاعات در RAM میشود ...
حالا چه فکر میکنید؟؟؟

حالا فکر کنید قرار باشد کد فوق در متدی مثل Game.Update قرا داشته باشد و قرار باشد در هر ثانیه 60 باری اجرا شود !!!
برنامه شما در یک ثانیه 120MB اطلاعات را فقط به خاطر همین یک خط دستور در RAM جابه جا خواهد کرد!
حتماً باز هم میگید چرا برنامه کند است!!!

یادتان نرود اکثر کدهای برنامه نویسی شما همان تعداد خط کد ظاهری که شما تایپ میکنید نیستند.

(الگوریتم مرتب سازی یک چیز کلی و استاندارد در همه زبانها است و قرار نیست کاری در مریخ انجام شود، اگر دستور اجرا میکنید نباید انتظار داشته باشید که با جادو و دستور در یک آن در CPU اجرا شود، برای انجام عملیاتها یا شما باید الگوریتم را بنویسید یا کس دیگری قبلاً آن را نوشته و در هر دو صورت این الگوریتم هزینه ای برای اجرا دارد.)

==============

متاسفانه یا خوشبختانه بحث "سرعت و بازدهی کدهای مختلف" همچنان ادامه دارد !!!
(آمدیم یک پست در مورد این مطلب بزنیم ولی حالا ... !)
حداقل دو مطلب دیگر باید بیان شوند و وقت خالی ام فعلاً تمام شد.

عــــلی
04-08-2009, 12:46
سلام به همه دوستان و خسته نباشید وقعاً...
باور نکردنیه...الان یه، یه ماهی میشه که دارم میرم تو کار ساخت بازی.....اصلاً نمیدونستم این xna چیه....
بعد یه مدت تحقیق میخواستم از 3d game studio شروع کنم...بعد زیاد تعریف ازش نشنیدم....
بعد یه خورده بیشتر با گوگل ور رفتن...دیدم یه برنامه ای ساخت ماکروسافت به نام XNA هم وجود داره...
که جز تعریف چیزی ازش نشنیدم.... اصلاً هم منبع کافی پیدا نکردم..
یه خورده فکر کردم...گفتم توی انجمن برنامه نویسی این داش حسن یه تاپیک زده بود تحت عنوان xna نبود؟شک کردم ولی دوباره که اومدم مطمعاً شدم....
حالا این از شانس من بود مثل اینکه...جا داره یه تشکر درست و حسابی از داش حسنم بکنم...واقعاً ممنونم بابت زحماتت...لطفاً کارت رو ادامه بده...کارم داره راه میوفته...چون یه ایده دارم باید هر چه سریعتر پیادش کنم.

چند تا سوال داشتم.....
این برنامه XNA رو از کجا میشه گیر آورد؟لطفاً لینک دانلودش رو بزارین....
محیط XNA چطوریه؟
آیا ویژوالیه؟مثلاً آبجتهای سه بعدی رو میتونی توش مشاهده کنی؟مثل 3d game studio.
آیا آبجکت های 3ds max 2009 رو مسقیم با متریال میشه وارد این برنامه کرد؟
آیا روی ویژوال استادیو نصب میشه؟
کسی منبعی برای خرید این برنامه یا آموزشش رو داره؟من شدیداً نیاز دارم...
آیا این برنامه فقط برای ساخت بازیه؟لطفاً بیشتر توضیح بدید...

اون لینک کتابهایی که دوستان برای دانلود گذاشتن رو دانلود کردم از همتون ممنونم.اگه میتونین بازم کتاب معرفی کنید..مهم نیست که انگلیسی باشه...فقط آموزشی باشه..
با تشکر فراوان....
ممنون و موفق باشید..

_H2_
04-08-2009, 14:01
سلام

==============

----- مصرف صحیح منابع و آزاد سازی به موقع

سلام
تا حد امکان سعی کنید اشیایی را که امکان دارد و مشکلی ایجاد نمیکنند یکبار new کنید و اشاره گر مربوطه را نگه داری کنید و بارها مصرف کنید.
(مثلاً رعایت مورد فوق در مورد Connection های دیتابیس و برنامه های شبکه ای با تراکنش بالا مشکل ایجاد میکند و باید Connection خیلی دیر new و خیلی زود Dispose شود.)

حتماً تدابیری اتخاذ کنید تا اشیایی که دارای واسط System.IDisposable هستند در پایان استفاده نابود شوند و حافظه تخصیص یافته برای مصارف آتی فوراً آزاد شود.

اگر شی ای که واسط System.IDisposable دارد را در یک متد و روال تعریف و استفاده کرده اید و چرخه حیات آن وابسته به همان متد است حتماً حتماً حتماً از دستور Using در دو زبان فوق الذکر استفاده کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در صورتی که شی مورد نظر عمومی و در سطح کلاستان تعریف شده، برای کلاس خود واسط System.IDisposable را پیاده سازی کنید تا تضمینی باشد بر نابودی اشایی فوق در زمان نابودی کلاس خودتان.

اگر درست عمل کنید یک زنجیره محکم نابود سازی و آزاد سازی منابع خواهید داشت ...
بالاخره برنامه از متد Main و با نمونه سازی XNA.Game آغاز میشود و در زیر برنامه Main هم تعریف خود XNA.Game با دستور Using بوده، پس میتوانید در Dispose کلاس XNA.Game خودتان اشیای عمومی تعریف شده را هم نابود کنید و در Dispose هر کدام از انها هم باز زیر اشیای دیگر را نابود کنید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

==============

----- ساده سازی عبارات و استفاده از الگوریتم بهینه تر
در صورت امکان بخشهایی که زیاد پردازش شده و تعداد قابل ملاحظه ای اجرا دارند را ساده کنید و به جای فراخوانی تودرتوی سایر توابع خودتان همانجا مقادیر را محاسبه کنید.

مثلاً نیاز به مربع طول یک بردار دارید ...
مثلاً در نمونه زیر کمی کد دوم بهتر است!

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته این فقط نمونه بود و تاثیر چندانی ندارد ولی اگر توان ریاضی اش را داشتید در جاهای خاص میتوانید چند ضرب ماتریس را روی کاغذ خلاصه کنید و از فرمول خلاصه تان استفاده کنید.

=====

در خصوص الگوریتم هم که توضیح خاصی نمیخواهد و فکر کنم همه متوجه هستند ...
در برنامه نویسی هم مثل ریاضی برای انجام یک عملیات میتوان کدهای مختلفی نوشت،
برای بخش های عملیاتی و پردازشی سعی کنید فکر کنید و بهترین کد را که با کمترین هزینه کار مطلوب را انجام میدهد بنویسید.

==============

یک پست دیگر در خصوص "سرعت و بازدهی کدهای مختلف" خواهیم داشت و سپس خواهیم رفت سراغ مبانی ریاضی و هندسه سه بعدی.
رعایت تمام موارد بیان شده در چهارچوب "سرعت و بازدهی کدهای مختلف" تا اینجا در سایر برنامه های غیر سه بعدی هم خوب است و باعث افزایش بازدهی و شفافیت کد خواهد شد.
ولی تاکید میکنم و باز تاکید میکنم که مطالب پست بعدی را فقط و فقط برای برنامه نویسی سه بعدی مثل XNA رعایت کنید و انجام دهید و از انجام آن در سایر برنامه نویسی ها و کدها خودداری کنید چون مطالب پست بعدی که میخواهم بگویم چندان با قواعد برنامه نویسی ساختار یافته مطابقت ندارد ولی در برنامه های سه بعدی به علت وجود حجم بالای پردازش رعایت آن مهم است.
(در سایر برنامه نباید دستورات و روش های گفته شده در پست بعدی من اجرا شود.)

==============


چند تا سوال داشتم.....
عجیبه پستهای قبلی را ندیده اید؟:31:


این برنامه XNA رو از کجا میشه گیر آورد؟لطفاً لینک دانلودش رو بزارین....
کسی منبعی برای خرید این برنامه یا آموزشش رو داره؟من شدیداً نیاز دارم...

کامل در پست 8 همین تاپیک لینک ها موجود هستند.
همانطور که بیان شد آموزش یا کتاب درست و حسابی فارسی وجود ندارد.
چند pdf تکه و پاره که یک یا چند تابع را توضیح دادند و تمام. باید از منابع انگلیسی آنلاین یا pdf ای معرفی شده در پست 8 و 11 استفاده کنید.


محیط XNA چطوریه؟
آیا ویژوالیه؟مثلاً آبجتهای سه بعدی رو میتونی توش مشاهده کنی؟مثل 3d game studio.
آیا روی ویژوال استادیو نصب میشه؟

مفصل در پست 7 همین تاپیک توضیح داده شده.


آیا آبجکت های 3ds max 2009 رو مسقیم با متریال میشه وارد این برنامه کرد؟
پنجمین هدف آموزشی این تاپیک در پست اول


آیا این برنامه فقط برای ساخت بازیه؟لطفاً بیشتر توضیح بدید...
مفصل در پست 6 توضیح داده شده.


اگه میتونین بازم کتاب معرفی کنید..مهم نیست که انگلیسی باشه...فقط آموزشی باشه
طبق چیزهایی که من دیدم فقط در حال حاضر فقط یک کتاب XNA3.0 در اینترنت وجود دارد که در تاپیک لینک داده نشده، یعنی جدید است و فعلاً لینک غیر قانونی ندارد!
راستی جالب است که این تاپیک را در دو تالار فارسی دیگر هم زدم، در یکی از انها به علت همین pdf ها اخطار دادند که چرا لینک دانلود pdf دادید! :31:

عــــلی
06-08-2009, 19:57
سلام دوستان خسته نباشید.
من الان دوسال که با ویژوال استادیو و دات نت این مشکل بزرگ رو دارم....:24:
به خطای زیر نگاه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دلتون واسم نمیسوزه؟:37:بعد سه روز تونستم این XNA رو دانلود کنم.....:45:
هنوز دانلود نکرده وسط دانلود این ویندوز لعنتی زده این فایل Exe برنامه xna رو خراب کرده...73 مگابایت با دایال آپ...
یه خورده خسته کنندهست ولی من نمیدونم چطوری این مشکل رو برطرف کنم...:45:
هر وقت هم برنامه ای تحت دات نت مینویسم و اونو exe یا build میکنم باید اول اونو در یک فایل rar بریزم تا بعد خراب شدن دوباره از داخل rar درشون بیارم:37:.
دیگه خسته شدم....لطفاً کمکم کنید...اگه من این مشکل رو دارم حتماً شما هم دارید...شاید سیستم یا ویندوز من استثنایی باشه.ویندوز xp SP3 دارم.:45:
انگار باید دوباره این xna رو با این idm دانلود کنم...نمیدونم چرا این idm همه فایلها رو با پسوند .exe0 و .exe1 و... دانلود میکنه ولی اون فایل اصلی رو با پسوند Exe میزاره....
اگه پسوندش exe نبود الان درست شده بود.:37:
راستی داش حسن ممنون از زحماتت من هنوز شروع به خوندن آموزشات نکردم...هنوز گیر این xna هستم....:43:.از سوالات تکراریم معذرت میخوام....امیدوارم بتونیم این فایلهای مکس رو مستقیم با متریال بیاریم داخل xna.
راستی یادم رفته بود عیدتون مبارک ایشالله همتون شاد و خرم و خوشحال و خوشبخت و موفق و سرحال باشید.
موفق باشید و سربلند.

L u K e !
06-08-2009, 20:16
خوب فکر کنم باید Sprive Pack رو نصب کنی روی Visual Studio

dogtag
06-08-2009, 20:21
ابراز تاسف و تاثر (من چه می دونم چجوری نوشته میشه! :دی) من رو بپذیر.

می دونم چی می کشی. خدا ایشالله به همه 56K دار ها صبر بده!

عزیز جان، من ورژن 3 و 3.1 رو دارم + یه سری Ebook و چرت و پرت، فکر کنم بشه نزدیک 1 گیگ.
مذخرفاتش رو کم کنم، فکر کنم بشه رو یه CD زدش.

اگر خواستی، بگو برات Write کنم و با پست برات بفرستم.
یا اگر بخوای، قبل از نماز جمعه 23 مرداد، تو خیابون بهت بدم و برم برای شهادت!

---

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]، چرا دیگه ادامه نمیدی؟
من 24/7 منتظرم!

_H2_
06-08-2009, 23:15
سلام
تولدت آخرین حجت خدا بر روی زمین بر عموم جهانیان، بخصوص بر و بچ p30world مبارک باشد.


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
امان ز لحظه غفلت که شاهدم هستی

السلام عليك يا خليفة الرحمان، السلام عليك يا شريك القرآن، اسلام علیک یا حجه الله، اسلام علیک یا بقیه الله، السلام عليك يا صاحب الزمان، السلام عليك يا قاطع البرهان، السلام عليك يا مهدی

دانلود دعای زیبای عهد:
cid-9b2bdd1b12ce8c7d.skydrive.live.com/self.aspx/Mahdi/Pray-Ahd-01.mp3.zip


ما منتظر رویت خورشیدیم

==============


خوب فکر کنم باید Sprive Pack رو نصب کنی روی Visual Studio
همانطور که در پست 8 ذکر نشده(!!!!!:31:) نصب VS-SP1 جزء ملزومات نیست.


من 24/7 منتظرم!:31::18::11:
بابا شما که خودتان این کاره اید!:31:


چرا دیگه ادامه نمیدی؟
قبلاً در پست اول اجازش را از دوستان و اساتید گرفته بودم!

شاید تاپیک مدت زیادی بخوابد ...
:11::11::11::11::11:
تازه از آخرین پست حدو دو روز گذشته.
:11::11::11::11::11:
بحرحال پست بعدی حاضر است.


هر وقت هم برنامه ای تحت دات نت مینویسم و اونو exe یا build میکنم باید اول اونو در یک فایل rar بریزم تا بعد خراب شدن دوباره از داخل rar درشون بیارم

شما بدون شک و تردید ویروسی در سیستم خود دارید.
شما احتمالاً شاید گاهی اوقات هم خطا در svchost تان مواجه میشود که دیالوگی از طرف ویندوز بابت توقف این سرویس مشاهده خواهید کرد.
یک ویروس مثل ژفو که به فایلها میچسبد ولی PE خاص دات نت مانع کارکردن بعد از آلودگی شده باشد.

در این موارد پیشنهاد میکنم برای اطمینان به جز استفاده از ضد ویروس ها، در یک نگاه سریع حجم فایلهای ویندوز خود را با یک ویندوز سالم بسنجید.
مثلاً دو فایل که همیشه برای من معیار خوبی در تشخیص ویروس ژفو بوده اند، اینها هستند.
در ویستا فایل calc.exe حدود 172K است و در XP حدود 112K
در ویستا فایل svchost.exe حدود 21K است و در XP حدود 14K (اولین فایل هدف حمله ژفو که حجمش چند برابر میشود.)


دقت کنید که ویروسهای مثل ژفو همه exe ها را آلوده میکنند و با تعویض ویندوز اگر باز هم سعی کنید برنامه های جدید را از setup های موجود در هارد نصب کنید، مجدد کل سیستم ویروسی میشود، چون شما exe سالمی ندارید!!

والبته در این شرایط اگر ضد ویروس هم نصب کنید، گزارش بالای 500 و 600 و... تا ویروس در رایانه شما میدهد و هر exe را ویروس گزارش میکند! که البته حق هم دارد!

پیشنهاد میکنم:
1- اول تمام Hidden و System ها را روشن کنید (hidden files و protected system files)
و مطمئن شوید ریشه درایوهایتان فایل autorun.inf و exe مخفی نداشته باشد و اگر بود پاکش کنید.
ترجیحاً سیستم را با CD بوت کنید و از CD بوت اقدام به عمل مذکور کنید و ریشه هر درایو را امن کنید.

2- بعد هم کل درایو محل نصب ویندوز را فرمت کرده و با CD یا DVD امنی مجدد ویندوز را نصب کنید.

3- از یک CD یا DVD امن یک نسخه معتبری از آنتی ویروسی که توانایی پاک کردن و حذف ویروس از Exe اصلی را داشته باشد نصب کنید.
(مثل McAfee)

4- کلیه درایوها دیگر ا بزنید اسکن کند و اگر توانست سایر exe های بدردبخورتان را clean کند که هیچ و اگر نتوانست حتماً و بدون اجرا کردن دستور delete فایل Exe را بدهید، بالاخره این فایل exe به کار شما نمی آید.

(
اگر هم فعلاً نمیتوانید ویندوز عوض کنید حداقل یک آنتی ویروس که بتوانید فایل ها را clean کند نصب کنید و به سایر دوستان و آشنایان هم exe ندهید و برایشان exe از رایانه تان کپی نکنید.
)


اگه پسوندش exe نبود الان درست شده بود
درست است که exe است ولی در واقع فایلش zip است با یک هسته کد unzip !
برنامه winrar میتواند این فایل را بدون اجرای exe اش unzip کند.
البته گفتید آلوده شده و صدمه دیده ولی یکبار با winrar تستش کنید شاید بتواند محتویاتش را باز کند.(دو تا exe و دوتا msi)

موفق باشید.

_H2_
06-08-2009, 23:56
سلام

----- کاهش انتقال اطلاعات در حافظه پشته

(اخطار! این مطلب را فقط باید در برنامه نویسی های سه بعدی رعایت کنید و عدم رعایت و پیاده سازی این مطالب در سایر برنمامه ها سودش بیشتر از ضررش است!)

محل استاندارد نگه داری و ذخیره Struct ها در حافظه پشته است.
و حتماً میدانید که این به نوعی مختص همان متدی است که الآن دارد اجرا میشود.
نتیجتاً برای انتقال اطلاعات به/از متد رایانه مجبور میشود دیتاها را جابه جا کند و به پشته مناسب دیگر انتقال بدهد.
(این مطلب ربط خاصی به زبان و محیط برنامه نویسی هم ندارد و تقریباً در همه زبانهای برنامه نویسی وجود دارد)

به تابع زیر دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این یک تابع نمونه است که سه پارامتر میگیرد و یک پارامتر پس میدهد...
نتیجتاً و کلاً 4 پارامتر ورودی خروجی دارد که باید به/از پشته منتقل شود.

اما هر آرگومان ورودی خروجی فوق چه حجم کپی را به سیستم تحمیل میکند؟
1- آرگومان x:
تعداد بایتهای کپی برابر حجم بایتی struct است
(مثلاً
int=float=4Byte
datetime=double=8Byte
XNA.Vector3=12Byte
XNA.Matrix=64Byte
و...
)

2- آرگومان y:
چون byref است فقط اشاره گرش کپی میشود که در یک سیستم 32 بیتی 32 بیت و برابر 4 بایت است.
یعنی بدون توجه به حجم struct و نوع ان فقط 4 بایت اشاره گر منتقل میشود.

3- آرگومان z:
چون class است و اصلاً ربطی به پشته ندارد، فقط همان اشاره گر 4 بایتی اش کپی میشود.

4- آرگومان بازگشتی از نوع structtype1
مثل آرگومان x است و به اندازه حجمش کپی میشود البته در جهت عکس x که چندان فرقی ندارد!

خوب حالا نتیجه ؟

نتیجه اخلاقی(!)، فلسفی(!)، علمی مطلب فوق ان است که اگر struct ای بخواهد به تابعی پاس داده شود و یا گرفته شود، و اگر ان struct بزرگتر از 4 بایت (و ترجیحاً بزرگتر از 8 بایت) باشد ارجاع اشاره گری آن بهتر و بهینه تر است و حجم کمتری پردازش و هزینه را در بر دارد.

البته ارسال اشاره گری این خطر بزرگ را دارد که عمدی یا سهوی و یا با خطا و... مقدار متغییر در داخل متد و روال تغییر کند در حالی که ما اصلاً نمیخواستیم این مقدار در متد عوض شود و میخواستیم فقط ان را بخواند...
ولی خوب یک کم اگر حواستان جمع باشد و اعتماد داشته باشید در برنامه های سه بعدی خوب است!

مایکروسافت هم در همین جهت در توابع خود دو دسته کد و ورودی خروجی را سازمان داده ...

به دو کد زیر دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این دو کد دقیقاً یک عمل را انجام میدهند.
ولی کد اول در حالت تئوری حداقل 36 بایت را در عملیات خود کپی میکند در حالی که کد دوم در حالت تئوری فقط موجب کپی 12 بایت میشود!

=====

اگر خودتان میخواهید توابعی با الگوی ورودی خروجی دوم بنویسید و در پروژه تان استفاده کنید ... باید باید باید حواستان باشد و مطمئن مطمئن شوید که در نوشتن تابعی با الگوی دوم اشتباهاً مقدار یک پارامتر ورودی byref را در کد تغییر ندهید.

یک مثال دیگر از ضرب سه ماتریس به دو روش!

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این دو کد دقیقاً یک نتیجه دارند ولی برخلاف ظاهر دو کد مطمئن باشید کد دوم بسیار سریعتر اجرا میشود.
کد اول در حالت تئوری حداقل موجب 384 بایت انتقال اطلاعات در پشته میشود ولی کد دوم در حالت تئوری فقط موجب 24 بایت انتقال اطلاعات بین پشته میشود !!!!!! (حساب نکنید! 16 برابر کمتر میشود!)

بحث سر تفاوت 360 تک بایت نیست ...
1- مشکل سر همان حلقه های پنهانی است که اغلب متوجه شان نمیشودی ولی باعث میشود یک خط کد شما در برنامه های سه بعدی بارها و بارها و بارها اجرا شود و صفرهای ناقابل را در جلوی هزینه ها اضافه کند!

2- قطره قطره جمع گردد و بانگهی دریا شود.

(
البته این را هم اضافه کنم که به علت سادگی بیشتر کد اول و درک راحت تر آن در کدهای اتی این آموزش احتمالاً از همان کد اول استفاده خواهد شد و کدهای آتی ارائه شده در این اموزش لزوماً بهترین کدها نیستند و در این تاپیک اولویت با سادگی و قابل فهم بیشتر بودن کدها خواهد بود.
نتیجتاً شما باید این موارد را رعایت کنید ولی من برای کدهای این تاپیک شاید در جهت منافع آموزشی انها را رعایت نکنم.
به این میگن حق وتوی دات نتی! :31::blink:
)
=====

قرار بود این مطلب آخری در خصوص سرعت و بازدهی باشد ولی دلم نمی آید مطلب را ناقص بگذارم، چون مطمئن هستم اگر نگویم دوستان جای دیگری یا نخواهند دید یا کمتر میبینند کسی این مطالب را شرح دهد.
البته بدیهی است که خیلی از دوستان هم این مطالب را بهتر از من میدانند و به انها تسلط کامل دارند ...

ولی بحرحال به عنوان مطلب پایانی این بحث باید یک پست و مطلب دیگر را توضیح دهم تا حداقل خودم به درجه رضایت نسبی برسم!:11:

dogtag
07-08-2009, 00:24
خیلی ممنون از این قسمت پنجم.
خیلی منطقیه که بدون Ref پاس دادن آرگومان ها، باید کپی شوند و سرعت پایین میاید ولی به 3 دلیل رعایت نمی شود.
1- ریزه میزه بودن و گم شدن در پروژه! (خب شما که دارید GTA IV می سازید، باید حواستون به 1024 جا باشه! دیگه یه Ref یادتون نمی مونه)
2- خطرناک بودن! (خودتون بهتر توضیح دادید)
3- یادم رفت! [وقتی یادم اومد، ویرایش می کنم!]

ولی خیلی مطلب خوبی بود. باز هم ممنون.

یک سری سوال:
1- میشه تمام Struct Type ها رو نام ببرید. (فکر کنم قبلاً گفتید، ولی کامل می خوام)
آخه برای من یک کم نا مفهومه!
خب هر Typeی یک Class ه دیگه!
هم Int یک Type ه و هم Vector3 و هم کلاسی که خودمان نوشته باشم!

حتی Struct هم خودش یک کلاسه! (البته فکر کنم. یا حداقل میشه به عنوان یک کلاس ازش استفاده کرد!)

2- الان خیلی زوده! ولی این Vector4 چیه؟ آخه زمان ما فقط 3 تا بردار جهت بود! چهارمی اش چیه؟!

3- این رو هم یادم رفت! [و وقتی یادم اومد، ویرایش می کنم!]


باز هم ممنون که دارید مطالب عمقی یادمون می دید.

_H2_
11-08-2009, 16:42
سلام

----- طراحی اشیای مناسب در 3DMax و استفاده صحیح از Texture

این مطلب چندان ربطی به کدنویسی ندارد ولی بسیار بسیار مرتبط با طراحی برنامه های سه بعدی است.
برای ساخت یک شبیه ساز یا بازی یا هر برنامه سه بعدی، شما نیاز به یکسری اشیا سه بعدی طراحی شده در نرم افزارهای سه بعدی دارید.

ولی اشیا استفاده شده در برنامه های نرم افزاری سه بعدی با اشیای طراحی شده توسط یا سه بعدی کار ماهر لزوماً یکی نیست.


مثلاً ...
اگر شما به اغلب سه بعدی کارها بگویید برایتان یک ماشین یا تانک یا ساختمان و... طراحی کنند که در بازی تان استفاده کنید، آنها میتوانند شی مورد نظر شما را با تمام جزئیات و کامل در داخل 3dmax طراحی کنند!
که شی نهایی بسیار زیبا و خوش ساخت هم خواهد بود ولی اغلب این اشیا ارزش کاربردی در برنامه های سه بعدی ندارند!!!

یک سه بعدی کار به صورت عادی وقتی میخواهد یک چرخ ماشین را بسازد، آن را دقیق با بلوک ها و اجزای سه بعدی می سازد!
وقتی میخواهد یک ساختمان را بسازد، آجر به آجر را ساخته و تکثیر میکند و حتی فاصله بین آجرها و شیارهای پنجره و... را هم سه بعدی می سازد.
اگر قرار باشد زنجیر یک تانک را طراحی کند، دقیقاً بلوکهای ذنجیر را ساخته و آنها را در امتداد محل تکثیر میکند.

این قبیل کارها بسیار زیبا هستند ولی برای کار بازی سازی مطلقاً فاقد ارزش هستند!!!

آن فرد متخصص سه بعدی کار میخواهد یک تک ماشین را با 100 یا 200 هزار یا فیشتر فیس روی رایانه خودش که معمولاً بسیار هم قوی است ببیند و آخر سر هم چهار ستون رایانه و RAM و CPU و HDD و VGA و... میلزد تا یک دانه ماشین او را روی مانیتور نشان دهد!!!

حالا شما فکر کنید بخواهید 10 یا 100 تا از ان ماشین یا تانک یا آدم یا ساختمان و... را در بازی خود لود کنید و تازه کلی مخلفات اضافه هم داشته باشید (سایر اشیا و زمین و ساختمانها و درختها و شهر و...)
آنگاه بدون شک برای اجرای بازی شما به جای 500M حافظه نیاز به یک رایانه با 5GB حافظه و به جای کارت گرافیک 512MB یک کارت گرافیکی 500GB نیاز خواهید داشت!!!!

اگر شما به بازی های روز و قوی فعلی نگاه مهندسی معکوس وار (و نه نگاهی از سر لذت و کیف بردن از بازی!) بیاندازید متوجه نکته کوچک و البته بسیار مهمی در تفاوت اشیای استفاده شده توسط این بازیها میشوید.
در تمام بازیها برای پیاده سازی جزئیات یک شی از تصویرهایی استفاده میشود که روی سطح را مثل یک کاغذ دیواری میپوشانند.


یعنی اگر بتوانید روی چرخ ماشین زوم کنید (مثلاً در بازیهای سبک استراتژیک) متوجه میشود سطح چرخ کاملاً صاف است و جزئیات پیچ و مهره و آج های لاستیک و... در واقع تصاویری هستند که روی سطح کشیده شده اند.

یا اگر روی زنجیر تانکی زوم کنید متوجه میشود زنجیر هم صاف است ولی رویش یک عکس الگو دار کشیده شده.

دیوار و پنجره و... ساختمانها هم همه تصویری هستند که روی یک سطح صاف کشیده شده اند.

حتی در بازیهای استراتژیک روی سربازان مسلسلچی هم زوم کنید متوجه میشوید قطار گلوگه ها که از تفنگ آویزان است در واقع یک سطح دو بعدی است که رویش تصویر گلوله نقش بسته.

یا اگر به لوله تانکی دقت کنید به نظر سوراخ می آید ولی وقتی زوم میکنید متوجه میشوید که سوراخ نیست و یک تصویر گرد که وسطش سیاه است را روی لوله گذاشته اند که از دور تداعی سواراخ را میکند.
(نمونه دیوار زیر فقط تصویر معمولی و عادی هستند که روی سطح کشیده شده اند)

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

شما باید تا حد امکان زوایاو جزئیات واقعی سه بعدی اشیا را کاهش دهید و به جایش ان جزئیات را روی تصاویر روکش شده برای اشیا بیاورید.
چون هر زاویه و جزئیات سه بعدی منابع سیستم و کارت گرافیکی را مصرف میکند ولی برای رایانه فرقی ندارد که تصویر روکش ساده باشد یا رنگارنگ باشد!

پیشنهاد میکنم با در نظر گرفتن مطلب فوق و با نگاه دقیق تر یک بازی رایانه یا پلی استیشن و ... را دقیق بررسی کنید و اشیا را برسی کنید از نزدیک ترین فاصله ببینید!
(به فکر بردن نباشید! خیالتان راحت اگر بازی را باختید ایراد ندارید میتوانید دوباره اجرایش کنید! :31:)
========================================



- میشه تمام Struct Type ها رو نام ببرید. (فکر کنم قبلاً گفتید، ولی کامل می خوام)

آخه مگه یکی دو تا است! صدها struct و هزاران class داریم!
در VB و #C و رد بخش کد نویسی روی هر نوعی که خواستید راست کلیک کنید و گزینه Go to Definition را بزنید.
VB پنجره ObjectBrowse را باز میکند و #C هم یک هدر از نوع را، میتوانید ببینید struct است یا class .



آخه برای من یک کم نا مفهومه!
خب هر Typeی یک Class ه دیگه!
هم Int یک Type ه و هم Vector3 و هم کلاسی که خودمان نوشته باشم!

شیوه مدیریت و نگه داری اطلاعات در حافظه برای struct ها با class ها در همه زبانهای برنامه نویسی متفاوت است.
strcut ها در حافظه پشته مخصوص همان متد جاری تخصیص داده میشوند و class ها در یک حافظه جداگانه و مشترک.
نتیجتاً struct ها در زمان ورود و خروج از متد ها و توابع و... باید مجدد به پشته جدید کپی شوند و به همین علت است که وقتی struct را به صورت عادی به متدی پاس میدهید تغییرات آن متد روی struct تاثیری در توابع بالاسری و فراخوان ندارد، چون هر کدام کپی خودشان را دارند.



حتی Struct هم خودش یک کلاسه! (البته فکر کنم. یا حداقل میشه به عنوان یک کلاس ازش استفاده کرد!)


همانطور که قبلاً و در پست 27 گفتم:


دات نت زبانی کاملاً شی گرا است و تا انجا پیش رفته که Struct های ان نیز مطابق اصول شی گرایی هستند ...
تمام Struct های دات نت وراثتی هستند از System.ValueType و آن هم وراثتی است از System.Object

از نظر وراثتی و سلسه مراتب شی گرایی دات نت میتوان گفت Struct هم یک شی هستند و وراثتی از class هستند
ولی مدیریت حافظه همان است که در بالا گفتم و پست 34 گفتم
و انتقال اطلاعات بین struct و کلاس پایه object هم در پست 27 بیان شد.

به نظر من که خیلی شفاف است!



2- الان خیلی زوده! ولی این Vector4 چیه؟ آخه زمان ما فقط 3 تا بردار جهت بود! چهارمی اش چیه؟!

خیالتان راحت! همیشه فقط و فقط سه بردار و محور داریم و لاغیر! اصلاً من خودم از مخالفان سرسخت این بحث های بیشتر از سه بعدی هستم!

ولی مقصود XNA اصلاً اینها نبود!
در خیلی از موارد برنامه نویسی سه بعدی ما نیاز به یک بردار و یک عدد داریم که میتوانستیم چنین پکش کنیم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی XNA آن را به صورت XNA.Vector4 که میبینید پک کرده که این کار ضمن داشتن مفهوم ریاضی بیشتر و قابلیت انجام محاسبات ترکیبی با ماتریس ها، سادگی را هم همراه دارد.
از جمله مواردی که نیاز به بردار و یک عدد داریم میتوان به چرخش اشیا حول یک بردار مشخص با زاویه مشخص اشاره کرد یا معادله صفحه در فضای سه بعدی که فرمول ان در ریاضی یک بردار نرمال دارد و یک عدد موسوم به D است ( البته نوع ویژه ای برای آن داریم XNA.Plane) و...
کلاً هر کجا نیاز به یک بردار و یک عدد دیگر هم در کنار ان باشد میتوانید برای پک کردن و یکجا نگه داشتن و محاسبه و انتقال به متدهای دیگر و... از XNA.Vector4 استفاده کنید.

(خیلی شبیه دنیای واقعی فیزیک که به علت دخیلی بودن زمان در اغلب محاسبات، فیزیکدانان می آیند و زمان را هم به عنوان بعد چهارم در محاسبات در نظر میگیرند و دنیا را با زمان چهاربعدی فرض میکنند)

-پایان بحث سرعت و بازدهی-
مطالب بعدی در خصوص پیش نیازهای ریاضی خواهد بود.

==============

یک مژده هم به دوستانی که XNA را شروع کرده ام بدهم!
همانطور که حتماً متوجه شده اید XNA از نمایش runtime متون string از RightToLeft پشتیبانی نمیکند و به صورت runtime قادر به نمایش متون فارسی و عربی نیستید ...
البته میتوانید کلمات و عبارات خود را عکس و تصویر کنید و در برنامه نشان دهید که این کار خیلی ساده تر و البته سریعتر هم است ولی بحرحال فعلاً runtime نمیتوانید یک string فارسی را نمایش دهید!

اما مژده اش !!!
من توانستم تابعی جدیدی برای این امر نوشته و با موفقیت هم آزمایشش کنم که اجازه میدهد به همان سادگی نمایش متون انگلیسی و با همان دستورات و بدون دنگ و فنگ بتوانید متون فارسی را هم نمایش دهید. :20:
انشا ا... در محل مناسب و در امکانات ghnet.xna.dll معرفی خواهد شد.

موفق باشید.

dogtag
11-08-2009, 17:07
ممنون از توضیحات مبسوط.

فقط امیدوارم اون قضیه ی فارسی نویسی رو، سورسش رو هم بهمون نشون بدید.
آخه اگر قضیه بازی سازی بود، می رفتیم موتور Dunya رو می خریدیم و با کیفیت خدا بازی می ساختیم که همه چیز داشته باشه.

اومدیم پیش شما که XNA یاد بگیریم و کم کم با A* و سایر مخلفات مربوط به منطق بازی آشنا شیم.

ممنون می شم اگر بسورسید! :دی

L u K e !
11-08-2009, 17:25
... خان شروع کنید دیگه شما خیلی وارد چیزای تخصصی شدید
می گم یه قسمت بزنید واسه ی منابع اموزشی و کامپوننت ها ی اماده
با استفاده از Bitmap Font ?

عــــلی
12-08-2009, 10:13
سلام به همگی و داش حسن عزیز....ضمن تشکر از آموزشاتون یه چندتا سوالی برام پیش اومده....

من هنوز تو کف پست شماره 26 شما هستم:46:.واقعاً عالی بوود...


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگه میشه یه خورده بیشتر برامون توضیح بدید...حقیقتش من کمی احساس میکنم این مساله خیلی مهمی تو کد نویسیه با توجه به اینکه XNA فقط کد نویسیه...
من میتونم این کدها رو برای برنامه های Win App هم امتحان کنم؟

به کد زیر نگاه کن کدمشون درسته؟


string Str_Main = "Hello, How Are You? I Have A Hard Disc";
Str_Main = Str_Main.ToLower().Remove(0, 3).Substring(0, 23).Remove(2, 19);
MessageBox.Show(Str_Main);


string Str_Main = "Hello, How Are You? I Have A Hard Disc";
Str_Main = Str_Main.ToLower();
Str_Main = Str_Main.Remove(0, 3);
Str_Main = Str_Main.Substring(0, 23);
Str_Main = Str_Main.Remove(2, 19);
MessageBox.Show(Str_Main);

یا کد زیر:


decimal A = 1380, B = 2, C = 1;
DateTime Q = new DateTime(Convert.ToInt32(A), Convert.ToInt32(B), Convert.ToInt32(C));




decimal A = 1380, B = 2, C = 1;
int A1, B1, C1;
A1 = Convert.ToInt32(A);
B1 = Convert.ToInt32(B);
C1 = Convert.ToInt32(C);
DateTime Q = new DateTime(A1, B1, C1);

یه خورده درمورد این حلقه هایی که اضافی اجرا میشن و سرعت برنامه رو میگیرن بیشتر توضیح بدید...:11:.

و در مورد Using هم اگه میشه بیشتر توضیح و مسال بزنید...واقعاً ممنونم....:5:.

من اصلاً نمیدونم باید این XNA رو از کجا شروع کنم.....بعد از دانلود برنامه....با اینکه زبان سی شارپه ولی یه خط هم نمیتونم بنویسم:18:...شما چه راهی پیشنهاد میکنید برای یادگیری بهتر؟
جالبه که XNA خیلی فرق میکنه، و به احتمال خیلی زیاد من با توابع و کلاس های اون آشنا نیستم...
واقعاً از همه شما به خاطر همکاری ممنونم....
موفق باشید و سربلند.

_H2_
12-08-2009, 14:11
سلام
سیاست من در این تاپیک آن بوده که برای جواب سوالات و پیشنهادات مطرح شده تا حد امکان پست جدیدی نزنم و این مطالب را در انتهای پستهای اصلی آموزشی با دوستان حل و فصل کنم.
ولی برای دومین بار حجم سوال و پیشنهادات مطرح شده (و نتیجتاً جوابیه) زیاد شده که نیاز است در پستی مجزا کلیه آنها یکجا جواب داده شوند.



آخه اگر قضیه بازی سازی بود، می رفتیم موتور Dunya رو می خریدیم و با کیفیت خدا بازی می ساختیم که همه چیز داشته باشه.
اومدیم پیش شما که XNA یاد بگیریم ...

پیش خودمان باشد، به کسی نگویید(!)، نمیدانم چرا یک لحظه فکر کردم، من مسئول سازمان وزین حمایت از منافع مایکروسافت در خاورمیایه و آسیا شرقی هستم! :31::31::31::10:


می گم یه قسمت بزنید واسه ی منابع اموزشی و کامپوننت ها ی اماده
در حین بیان مطالب اگر کامپونت معتبری باشد که جایش در آن پست باشد، معرفی خواهند شد.


به کد زیر نگاه کن کدمشون درسته؟
فرقی ندارند!
جایی که من گفتم باید تعریف متغیر انجام شود برای مواردی بود که شما یک نتیجه را بیش از یک بار نیاز داشته باشید.
مثلاً این دو کد تفاوت بازدهی و سرعت زیادی ندارد و یکی هستند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولی این دو کد با هم متفاوت هستند و کد دوم صحیح تر و بهتر است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تفاوت آنجا است که در بخش اول ما یکبار به عدد int موجود در string نیاز داشتیم و کد اول و دوم فرقی نداشت.
ولی در بخش دوم ما دو بار به عدد int موجود در string نیاز داشتیم و کد اول به صورت مجزا دو بار این تبدیل را تحمیل کرده ولی کد دوم یکبار تبدیل را انجام داده و حاصل را دوبار استفاده کرده.

نتیجتاً چون در کدهای شما هیچ بخش تکراری وجود ندارد، تفاوتی بین کدهای اول و دوم نیست.
البته اگر به فرض مقادیر ورودی ثابت باشند (مثل Str_Main) و بخواهید چند بار این کار را انجام دهید میتوانید یک بار محاسبه کنید و آن را در متغییر محلی ذخیره کنید و دیگر هر کجچا نیاز شد فقط دستور MessageBox.Show را بدهید ولی باز هم کد اول و دومتان فرقی ندارند.

ضمناً در خصوص ان محاسبه string که نوشته بودید، کار وحشتناکی بود!
ولی برای نمایش در MessageBox.Show مشکلی ندارد، چون کاربر چیزی نمیفهمد ولی در یک برنامه عملی اگر خواستید همچین ویرایش های سنگین ترکیبی متدهای مختلف String را انجام دهید، پیشنهاد میکنم یک حلقه for یا foreach برای همه کاراکترهالی string تان بگذارید و خودتان در حلقه مذکور پردازش متنی انجام دهید و نتیجه را در یک StringBuilder ذخیره کنید.


و در مورد Using هم اگه میشه بیشتر توضیح و مسال بزنید...واقعاً ممنونم....
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]



من اصلاً نمیدونم باید این XNA رو از کجا شروع کنم.....بعد از دانلود برنامه....با اینکه زبان سی شارپه ولی یه خط هم نمیتونم بنویسم...شما چه راهی پیشنهاد میکنید برای یادگیری بهتر؟

بله، شما احتمالاً ساختارها و کلاسها را نمیشناسید.
متاسفانه من نمیتوانم سرعتم را افزایش دهم و در عین حال باید مطالب ریاضی و هندسی را هم بیان کنم. (که دلایلش را خواهم گفت)
پیشنهاد میکنم از pdf های معرفی شده استفاده کنید و برای نمونه فعلاً از همان platformer خود VS استفاده کنید که دوبعدی و ساده است.

==============


با استفاده از Bitmap Font ?
آن کد فارسی سازی کاملاً از کدهای استاندارد XNA استفاده میکند و در هر سه محیط Win و XBox و Zune قابل استفاده است.
طبق روال عادی فایل spritefont.* تعریف میکنید...
همانطور که احتمالاً میدانید، برای نمایش عادی متون انگلیسی همچین دستوری مینویسید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و برای نمایش متون مخلوط فارسی و انگلیسی به صورت RightToLeft با کمک تابع مذکور همچین دستوری مینویسید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همانطور که میبینید فقط یک تابع این بین افزوده میشود و دقیقاً مثل همینجا 114 اول فارسی و 114 دوم انگلیسی نمایش داده خواهد شد.

در طراحی تابع مذکور دقت بسیار شده و روی الگوریتم مورد نظر برای شرایط متون فارسی و انگلیسی و عدد و فاصله و... بسیار فکر شده.
ضمن اینکه از کدهای خاص unsafe با دقت فراوان استفاده شده که به این درجه اطمینان رسیده ام که هیچ طور دیگری این تابع قابل پرسرعت تر و پر بازده تر شدن نیست.
تابع مذکور همه کاراکتر های یونیکیدی فارسی را تشخیص میدهد.
(18 نوع "الف" یا 25 نوع "ی" و... نتیجتاً در هر محیط و ویندوزی که کد کامپایل شود، قدیم و جدید و عربی و فارسی و... تضمین کارکرد صحیح برای فارسی دارد.)


ممنون می شم اگر بسورسید!
الگوریتم را توضیح میدهم، خوبه؟ نه سیخ بسوزه و نه کباب! :31:
گمانم توضیح دادن الگوریتم نیمی از کد است.

1- جدولی sort شده و بسیار کوچک به صورت آرایه ای خام تهیه شده که حاوی همه کاراکترهای معنادار در زبان فارسی است که در استاندارد unicode وجود دارد و امکان دارد در هر سیستم و فارسی ساز ویندوز و... استفاده شود.
با روش جستجوی باینری و نصف کردن در کمتر از 8 مقایسه میتوان جایگاه یک کاراکتر را متوجه شد و فهمید فارسی است یا نه و چندمین حرف فارسی است.

2- در یک حلقه پردازش for داریم که کاراکتر به کاراکتر مقدار string ورودی را پردازش میکند.

3- برنامه کلیه کاراکترهای فارسی را با کارکتر مناسب همان حرف (اول و وسط و آخر و تنها) تعویض و جمع میکند تا برسد به عبارت انگلیسی...

4- بعد تمام کاراکترهای فارسی جمع شده تا آن لحظه را معکوس کرده و به خروجی اضافه میکند سپس به جمع آوری کارکترهای انگلیسی مشغول شده و تا رسیدن به کارکتر فارسی آنها را هم جمع میکند و الی آخر ...

5- اعداد هم جداگانه پردازش میشود... و سوییچ اعداد به یونیکدهای معادل فارسی فقط زمانی رخ میدهد که قبل از عدد متن فارسی وجود داشته باشد.

6- فاصله های سفید (هر کاراکتر غیر نمایشی) که پس از عددی باشد که قبل از آن عدد متن فارسی بوده باشد هم باید باعث ذخیره بافر در خروجی آن لحظه شود.

7- در نهایت بلاک های خروجی بعد for یک بار دیگر معکوس شده و تحویل return داده میشود.


در جهت سرعت حداکثری و البته با دقت کافی از یک string معمولی به جای بافرموقت و StringBuilder بارها بارها استفاده شده. و به راحتی با یک دستور intlength = 0 بافر مجازی Clean شده.
جالب انکه در انتها از همین بافر که با روش خاصی new شده برای جمع اوردی نهایی مقادیر استفاده شده و در return باز پس داده خواهد شد. (چیزی هدر نمیرود!)

حتی کدهای جمع دو string هم در قالب کدهای unsafe مدیریت مستقیم حافظه به طرزی بسیار کارامد از نو نوشته شده.
کد نویسی این تابع خاص با رعایت موازین دات نت و اطلاع از بازدهی و سرعت انواع کدها در مقابل کدهای مختلف نوشته شده.

نباید این حرف را بزنم، مخصوصاً که بد اموزی دارد!!!
(برای کسی که آشنایی کاملی ندارد شاید انجام این کار به مراتب سنگین تر و بدتر از کدنویسی عادی دات نتی باشد...)
ولی کد این تابع بیشتر از انکه شبیه کدهای عادی دات نتی باشد شبیه کدهای ++C است. (همانطور که گفتم حتی از جمع دو string هم در این کد استفاده نشده)

در کل تقریباً بعید میدانم بتوان این کد را بهتر و پرسرعت تر کرد.

==============

جمیعاً موفق باشید.:10:

dogtag
12-08-2009, 21:10
خیلی ممنون.
حرف بی خودیه ولی » اگر برای استفاده ی غیر تجاری بخواهیم و فقط بخونیم و پاکش کنیم، باز هم راهی ندارد؟

مرسی

L u K e !
15-08-2009, 11:12
یه سوال علی جان
مگه شما نگفتید که این XNB یه جور فایل ها رو فشرده می کنه ؟
یه مشکل پیدا کردم
این بار فایل های XNB م 5 -6 برابر فایل های اصلی حجم دارن
مثلا یه فایل png 1024*1024 که 1 مگ حجمشه XNB ش 4.5 mg حجم داره
ولی وقتی با WinRar فشردش می کنم همون حجم اصلی ش می شه

mahdi7s
15-08-2009, 11:42
مثلا یه فایل png 1024*1024 که 1 مگ حجمشه XNB ش 4.5 mg حجم داره
ولی وقتی با WinRar فشردش می کنم همون حجم اصلی ش می شه

احتمالا دارن با دات نت(GZipStream) فشرده میشن که روی بعضی فایل ها که خودشون تا حدودی فشرده هستن نتیجه ی مطلوبی نداره(مثل همین شما)

L u K e !
15-08-2009, 13:15
نتیجه ی مطلوب ندارن چیه نتیجه ش برعکسه

_H2_
18-08-2009, 13:34
سلام

بردار
XNA.Vector3

بردار یک پاره خط جهت دار است، به بیان ساده تر یک فلش یا پیکان در فضا که جهتی مشخص را نشان میدهد و طولی مشخص دارد.
بردار به ذات یک مکان هندسی نیست و جای خاصی در فضا ندارد و در عین حال میتوانید آن را هر جایی تصور کنید، مهم نوک جهت پیکان بردار و طول ان است.

هر بردار سه مولفه X و Y و Z دارد.

=====

نقطه !
XNA.Vector3

یک تک نقطه را در فضا مشخص میکند.
برای نقطه ساختار و کلاس جداگانه ای نداریم و میتوان از همان XNA.Vector3 استفاده کرد که سه مولفه X و Y و Z دارد.
طبیعی است که اگر منظور از XNA.Vector3 یک نقطه باشد دیگر توابع گفته شده در فوق بی معنی خواهند بود.
(
البته از دید ریاضی نقطه هم در واقع میتواند یک بردار باشد که از نقطه 0,0,0 به سمت آن محل کشیده شده و نام دیگر نقطه، میتواند بردار مکان باشد!
)

=====

بردار رنگی !
XNA.Vector3

لازم به ذکر است که در برخی توابع XNA برای مشخص کردن رنگ یا فیلتر رنگی خاصی باز از بردارد استفاده میشود که در آن شرایط XYZ مشخص کننده طولهایی RGB در یک مکعب فرضی رنگی هستند. به بیان ساده تر از XYZ به جای RGB استفاده شده.

البته ساختاری خاص برای رنگ هم داریم XNA.Graphics.Color

ولی باید این دقت را داشته باشید که لزوماً یک XNA.Vector3 را در کدی دیدی همیشه به عنوان یک بردار فضایی-مکانی عادی تصور نکنید.

=====

بردار ها قابل جمع و تفریق با برداری دیگر و یا ضرب تقسیم در یک عدد هستند که هر مولفه بردار جداگانه رویش عمل فوق انجام میشود و اپراتور این اعمال در ساختار XNA.Vector3 از قبل تعریف شده.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(در نوشتار جبری از همان چهار علایم اصلی استفاده میشود.)

=====

طول بردار
طول پاره خط بردار برابر جذر مجموع مکعب مولفه هایش است!

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(در نوشتار جبری از علامت قدر مطلق استفاده میشود، چون قدر مطلق یک عدد هم نوعی طول بردار است! مثلاً |x| )

مکعب طول بردار را که در برخی محاسبات نیاز میشود میتوانید با LengthSquared به دست اورید که در واقع دیگر محاسبه رادیکال را ندارد و سریعتر است. ²|x|

=====

نرمال سازی بردار
به عملی اطلاق میشود که طی ان برداری جدید تولید میشود که هم جهت با بردار اولیه است ولی طولش یک واحد است
طبیعتاً برابر است با تقسیم بردار بر طول خودش

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(
در نوشتار جبری چنیبن بیان میشود |n/|n
هموراه 1=| |n\|n |
)

=====

ضرب نقطه ای دو بردار
یک عدد میشود که برابر جمع ضرب جفت مولفه ها است.
و نیز برابر ضرب طول دو بردار در Cos زاویه بین آنها است.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بنابر تعریف دوم ضرب نقطه ...
اگر این ضرب صفر شود یعنی دو بردار عمود بر هم هستند ...
اگر این ضرب یک شود یعنی دو بردار موازی هم هستند ...
با کمک تابع ArcCos میتوان زوایه بین دو بردار را به دست آورد ...
و...

این ضرب کاربرهای بسیاری در هندسه سه بعدی دارد.
(
در نوشتار جبری از یک نقطه برای نمایش ان استفاده میشود v1.v2
هموراه (a.b=|a|.|b|.Cos(β
)

=====

ضرب خارجی یا متقاطع دو بردار
حاصل برداری است برابر با برابر دترمینالی 3 در 3 که سطر اول ان بردارهای یکه سه محور و دو سطر بعدی دو بردار باشند. (که به علت بردارهای یکه سه محور حاصل یک عدد مشخص نمیشود و یک بردار میشود.)
- طول این بردار حاصل برابر ضرب اندازه دو بردار در Sin زاویه بینشان است.
- بردار حاصل در فضا بر هر دو بردار قبلی عمود خواهد بود و جهت آن از قانون دست راست بدست می آید.
- اگر جای بردار اول و دوم عوض شود مولفه های نهایی 1- برابرخواهند شد.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(
در نوشتار جبری از علامت ضرب برای نمایش ان استفاده میشود v1×v2
هموراه (a×b|=|a|.|b|.Sin(β|
)

==============



اگر برای استفاده ی غیر تجاری بخواهیم و فقط بخونیم و پاکش کنیم، باز هم راهی ندارد؟

dll را قبل از مطالب برای دانلود میگذارم.
الآن هم میتوانم بگذارم ولی در وسط کدنویسی چند کلاس هستم که اصلاً هم قرار نیست در این تاپیک راجب آن چند کلاس صحبت شود ولی خودم ذاتاً چندان خوشم نمی آید که با این چند کلاس ناقص dll را منتشر کنم.
نتیجتاً به همراه پست بعدی و یا زودتر dll را منتشر میکنم و شما فعلاً یک تستی انجام دهید و ببینید اصلاً کار میکند یا نه! :31:



مگه شما نگفتید که این XNB یه جور فایل ها رو فشرده می کنه ؟
یه مشکل پیدا کردم
این بار فایل های XNB م 5 -6 برابر فایل های اصلی حجم دارن

دو مطلب در این مورد وجود دارد.
اول آنکه بیشتر pipline ها در زمان کامپایل کلاً فایل ورودی را کن فیکن میکنند! و با یک فرمت و استاندارد و سبک دیگری آن را ذخیره میکنند.

دوم آنکه من گفتم همچین قابلیتی وجود دارد ولی شما باید اول فعالش کنید!
در XNA3.1 به صورت پیشفرض قابلیت مذکور برای کامپایل debug غیر فعال و برای کامپایل Release فعال است.
نتیجتاً به عنوان یک راه حل ساده پیشنهاد میکنم پروژه را در حالت Release کامپایل کنید، البته شاید فرق زیادی نکند ولی بحرحال در این صورت است که آن بخش فشرده سازی فعال خواهد شد.

_H2_
28-08-2009, 18:12
سلام

شعاع
XNA.Ray

مکان هندسی نقاط مشخصی در فضا است که همگی از یک نقطه مشخص در یک راستای مستقیم هستند و از یک سمت تا بینهایت امتداد دارد ...
شعاع دو مولفه دارد (خیلی شبیه خط)، یک بردار جهت و یک نقطه (بردار مکان)

یعنی با داشتن یک نقطه در فضا و یک جهت مشخص میتوان یک شعاع فرضی ترسیم کرد.
شعاع در محاسبات راستای کلیک ماوس و یا راستای شلیک یک گلوله مستقیم و... میتواند کاربرد داشته باشد.

==============

صفحه
XNA.Plane

مکان هندسی نقاط مشخصی در فضا است که بردار این نقاط با یک نقطه مشخص بر بردار نرمال صفحه عمود است ...
صفحه دو مولفه دارد، یک بردار نرمال و یک نقطه (بردار مکان)

بردار نرمال صفحه برداری است که بر صفحه عمود است ...
با داشتن یک نقطه و یک بردار نرمال صفحه میتوان صفحه در فضا تصور کرد که از چهار طرف با بینهایت امتداد یافته است.

یعنی اگر از هر نقطه ای در صفحه به سمت نقطه دیگری یک بردار رسم کنیم این بردار با بردار نرمال صفحه عمود خواهند بود.

زمین صاف و صفحه حرکت دوربین و صفحه تشکیل سایه و... میتواند از موارد کاربردش باشد.

==============

ماتریس
XNA.Matrix
به طور مشخص در کار ما یک جدولی دو بعدی و 4 در 4 شامل 16 عدد است!

ماترسی ها کاربرد بسیار بسیار وسیعی در طراحی و کنترل فضاهای سه بعدی دارند که ناشی از قدرت آنها در مبانی ریاضی میشود.

یک ماتریس به تنهایی میتواند برای اعمال مختلفی روی تک نقطه و بردار و یک شی بزرگ مفید باشد.

مثلاً یک ماتریس میتوانید حاوی اطلاعاتی در خصوص ....
- بزرگنمایی مجزا در هر سه بعد
- وضعیت چرخش یک جسم به طور مجزا برای هر سه بعد
- نقطه مرکزی چرخش و دوران جسم
- نقطه مکانی انتقالی که جسم باید بدان جا حرکت کند باشد
!!!!
و با اعمال ان به ماتریس جسم میتوانید همه تغییرات فوق را در یک لحظه اعمال کنید!

این ساختار انواع متدهای C#-Static یا VB-Shared را دارد که ماتریس را برای شرایط مختلف تولید میکند و میتوان آنها را با عمل ضرب با هم ترکیب کرد.

=====

ضرب دو ماتریس
حاصل همچنان ماتریسی خواهد بود که هر عنصر آن از ضرب سطر نظیر در ماتریس اول در ستون نظیر در ماتریس دوم حاصل میشود
این ضرب خاصیت جا به جایی ندارد بدان معنی که m1*m2 برابر نیست با m2*m1

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

درک این مطلب بسیار مهم است که این ضرب خاصیصت جابه جایی ندارد.
به کد زیر دقت کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
mxscale اگر به هر مجموعه بردار مکان یا شی ای اعمال شود ابعاد آن را در همه جهات سه برابر میکند.
mxtrans اگر له هر مجموعه بردار مکان یا شی ای اعمال شود آن را دو واحد در جهت محور X ها حرکت میدهد.

فرض کنید یک شی سه بعدی در محل (0,0,0) قرار دارد و ماتریس mx1 و یکبار هم mx2 را به آن اعمال میکنیم.
(در محل مناسب طرز نمایش و این عمل توضیح داده خواهد شد.)

- اگر ماتریس mx1 به شی اعمال شود اول شی سه برابر بزرگتر شده و سپس به نقطه (2,0,0) میرود (با آینطور دیده میشود)

- اگر ماتریس mx2 به شی اعمال شود، اول شی به نقطه (2,0,0) میرود و بعد بردارهای مکان شی که آن را در این محل نشان داده و به شی حجم هم میدهند سه برار میشوند که نتیجه روی مانیتور آن خواهد بود که شی در محل (6,0,0) سه برار نمایش داده میشود.


یعنی خلاصه در mx1 شی در (2,0,0) سه برابر بزرگتر دیده میشود ولی با mx2 شی در (6,0,0) سه برابر بزرگتر دیده میشود.

این فقط یک مثال بود و این رفتار در اعمال دوران و ... هم پیش می آید و باید با دقت و تامل تصمیم بگیرید که اول کدام ماتریس باید در دیگری ضرب شود تا همان نتیجه را بدهد که میخواهید.

=====

متد XNA.Vector3.Transform جهت اعمال یک ماتریس روی یک بردار یا نقطه تکی
به عنوان نمونه جهت اعمال یک ماتریس به یک بردار میتوانید از متد XNA.Vector3.Transform استفاده کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد فوق بردار v1 را 45 درجه حول محور X چرخانده و حاصل را در v2 قرار میدهد.

==============

ما تقریباً چیز خاصی از مباحث ریاضی نگفتیم و فقط ساختارها را معرفی کردیم و موارد پرکاربرد ریاضی را مطرح کردیم ولی با توجه به اینکه تاپیک قصد آموزش پیشرفته ندارد، مباحث ریاضی در این پست تمام میشود.
(یعنی پستهای مخصوص رریاضی و با عنوان ریاضی تمام میشود و گرنه بحث ریاضی ادامه خواهد داشت)

شخصاً به دوستان پیشنهاد میکنم سعی کنند هندسه سه بعدی خود را قوی کنند تا در اعمال دستورات و چیزهایی که میخواهند در صحنه بازی مشکل نداشته باشند و دوربین دور سرشان نچرخد!

پست بعدی یا در خصوص نمایش طرح های دو بعدی خواهد بود و یا در ضمینه کنترلر دوربین (که طبیعتاً باز کمی ریاضیات دارد.)

==============

ghnet.xna.dll به پک معرفی شده در پست اول اضافه شد.
support.h02.ir/fwlink/?LinkId=1005808167
کسانی که خودشان ترسیم دوبعدی را بلد هستند میتوانند از تابع گفته شده (در انتهای پست 40) به همان شکل در نمایش متن فارسی استفاده کنند ولی در فایل spritefont.* باید مجموعه کاراکترهای فارسی را هم اضافه کنند:
اعداد فارسی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حروف فارسی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

البته میتوان مجموعه حروف فارسی را در spritefont.* به هم چسباند ولی این کار سرعت کامپایل را کند و حجم xnb را افزایش میدهد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

یک سمپل ساده از امکانات دو بعدی ghnet.xna هم به همراه نسخه exe به پک اضافه شد.

==============


دوستان, آیا این کتاب دوباره یافت شد؟
در مورد کتاب مذکور متاسفانه مجدد وقت نکردم جستجویی کنم.

==============

از صبر دوستان تشکر میکنم :11: و جمیعا موفق و پیروز باشید. :10:

_H2_
11-09-2009, 17:43
سلام


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ضربت خوردن و شهادت مولای متقیان، امیر المومنین، علی بن ابی طالب (علیه السلام) را بر عموم دوستان تسلیط میگم.

علی ای همای رحمت تو چه آیتی خدا را ///// که به ماسوا فکندی همه سایه‌ی هما را
دل اگر خداشناسی همه در رخ علی بین ///// به علی شناختم به خدا قسم خدا را
به خدا که در دو عالم اثر از فنا نماند ///// چو علی گرفته باشد سر چشمه‌ی بقا را
مگر ای سحاب رحمت تو بباری ارنه دوزخ ///// به شرار قهر سوزد همه جان ماسوا را
برو ای گدای مسکین در خانه‌ی علی زن ///// که نگین پادشاهی دهد از کرم گدا را
جز از علی که گوید به پسر که قاتل من ///// چو اسیر تست اکنون به اسیر کن مدارا
بجز از علی که آرد پسری ابوالعجائب ///// که علم کند به عالم شهدای کربلا را
چو به دوست عهد بندد ز میان پاکبازان ///// چو علی که میتواند که بسر برد وفا را
نه خدا توانمش خواند نه بشر توانمش گفت ///// متحیرم چه نامم شه ملک لافتی را
بدو چشم خون فشانم هله ای نسیم رحمت ///// که ز کوی او غباری به من آر توتیا را
به امید آن که شاید برسد به خاک پایت ///// چه پیامها سپردم همه سوز دل صبا را
چو تویی قضای گردان به دعای مستمندان ///// که ز جان ما بگردان ره آفت قضا را
چه زنم چونای هردم ز نوای شوق او دم / که لسان غیب خوشتر بنوازد این نوا را
همه شب در این امیدم که نسیم صبحگاهی ///// به پیام آشنائی بنوازد و آشنا را
ز نوای مرغ یا حق بشنو که در دل شب ///// غم دل به دوست گفتن چه خوشست شهریارا


========================================

قرار بود مطالب دیگری برای این پست اختصاص دهم ولی دیدم داریم وارد کد نویسی میشویم ولی هنوز مبانی و متدهای مهم و چگونگی آغاز کدنویسی XNA را توضیح نداده ایم.

کدنویسی در محیط XNA3.1 با وراثتی از کلاس XNA.Game آغاز میشود.
کلاس مذکور متدها و توابعی دارد که میتوان با بازتعریف انها عملیاتهای پایه ای خود را پیاده سازی کرد.
تک تک این پرکاربردترین متدها را در زیر بررسی خواهیم کرد.

==============

سازنده کلاس (در VB.Net با نام New و در C#.Net با نام خود کلاس)
طبیعتاً این اولین متد اجرایی است که دقیقاً بعد از ایجاد کلاس XNA.Game میتوانیم کدهای خودمان را در ان مستقر کنیم.
(پر شدن اشاره گر this در C#.Net و Me در VB.Net)

در این محل هنوز همه اشیا ایجاد نشده و نمیتوان هر کاری کرد و در اصل برای خیلی از دستورات زود است!
ولی معمولاً XNA.Game.Content.RootDirectory در یک پروژه عادی اینجا مقدار دهی میشود و نمونه ای از شی XNA.GraphicsDeviceManager هم برای کارهای اتی ساخته میشود.
(برخی از عملیات های New سازی عادی و مجزا را هم میتوان در این محل یا در متد بعدی انجام داد.)


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

برخی از کاربرهای شی GraphicsDeviceManager را در متد بعدی خواهیم گفت.

XNA.Game.Content.RootDirectory هم پوشه کاری شامل دیتهای xnb برنامه را (در کنار exe یا dll) مشخص میکند.
همانطوری که گفتیم XNA تمام فایلهای دیتا (شامل سوت و تصویر و شی سه بعدی و افکت و فونت و...) را به روش خاص پردازش و همه را به پسوند xnb.* سریالی میکند.
تنظیم مقدار مذکور نام پوشه ریشه حاوی این xnb.* ها را مشخص میکند.
تا در دستورات عادی دیگر ما نیازی نباشد مسیر فایلها را بدهیم و خود XNA بداند فایلها را از کجا میتواند پیدا کند.

(
مثلاً میتوان برای کیفیت و دستگاه مختلف چندین پوشه ریشه Content مانند ایجاد کرد و برای کیفیت تصویری زیاد (پردازش بیشتر و سرعت کمتر) و کیفیت تصویر کمتر (پردازش کمتر و سرعت بیشتر) چندین Content داشت
)

ولی ما در این آموزش همواره یک Content با همین نام "Content" داریم که همینوطری تنظیمش میکنیم (پیش فرض XNA)

==============

متد Initialize :
این متد اولین متد رسمی است که بعد از New اجرا میشود و در این مرحله کارهای بیشتری میتوان انجام داد و تنظیمات خاصی را برای برنامه اعمال کرد.
مثلاً میتوان Resolution مانیتور را تنظیم کرد (پیش فرض XNA برای محیط Windows مقدار 800-600 است)
و یا مشخص کرد که ماوس مرئی باشد یا نه و نیز وضعیت اجرای تمام صفحه را مشخص کرد.
(
هسته DirectX برای تحت کنترلر گرفتن کل صفحه نمایش و اجرای fullscreen بهینه سازی شده و در حالت واقعی حالت fullscreen میتواند بازدهی برنامه شمار ا افزایش دهد.
ولی DirectX مشکلاتی بابت خروج نابهنگام و یکباره از حالت fullscreen پیش می آورد و در این حالت استفاده از فرامینی که پنجره ویندوزی را ظاهر کند باعث مشکل برای برنامه میشود ...
مثلاً وسط حالت fullscreen دکمه Win و یا Alt+Ctrl+Delete و... را بزنید در بازهای رایانه ای دیگر هم میبینید مشکل ایجاد میکند.
این وضعیت برای trace و debug در داخل VS هم وجود دارد و برای debug راحت در VS در حین مراحل طراحی بهتر است fullscreen نباشد.
)

تنظیمات فوق از موارد کاربرهای XNA.GraphicsDeviceManager هستند.

یا در این متد میتوان مشخصات و پارامترهای کلی دوربین و فضای دید را مشخص کرد.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

گمانم دستورات فوق واضح هستند.
فقط دستورات ابتدایی تنظیم دوربین باید به این دستورات اضافه شود که در پست مخصوص کنترل دوربین این دستورات بیان خواهد شد و در خصوص ProjectionMatrix و تک تک مقاویر داده شده به CreatePerspectiveFieldOfView هم در همان پست توضیح داده خواهد سد.

==============

متد LoadContent
این متد بعد از فراخوانی Initialize از کلاس base اجرا خواهد شد و همانطور کهع از نامش مشخص است، محل پیشفرض برای بارگذاری Content ها (همان فایلهای xnb.*) داخل اشیای مناسب به داخل برنامه است.

برای بارگذاری دیتاهای فایلی برنامه از متد XNA.Game.Content.Load استفاده میکنیم که Generic است و نوع شی تولیدی و نام فایل xnb.* را میگیرد.

در صورت نیاز میتوان کراهای لازم دیگر را هم انجام داد، مثل تولید XNA.Graphics.SpriteBatch جهت ترسیمات دوبعدی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

میتوان فایلهای دیتاها در زیر پوشه های Content هم قرار داد و انها را منظم و دسته بندی کرد که در این صورت نام زیر پوشه ها مثل حالت عادی مسیر فایلها با یک اسلش اضافه خواهد شد.

(متدها و نحوه استفاده XNA.Graphics.SpriteBatch در پست ویژه ترسیمات دوبعدی بیان خواهد شد.)

==============

متد UnloadContent
این متد برعکس متد قبلی است و از ان میتوان در پایان برنامه برای آزاد سازی منابع و حافظه و... استفاده کرد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

==============

متد Update
این متد مدام تا انتهای برنامه و قبل از رسم هر فریم اجرا میشود.
باید در این متد دستورات پردازشی مدام خود را مستقر کرد.

مثلاً گرفتن فرامین ورودی کاربر از ماوس و کیبورد و جوی استیک و... و ترتیب اثر دادن به فرامین کاربر ...

در صورت نیاز :
حرکت دوربین و چرخش آن به محل جدبد
حرکت یا چرخش اشیای صجنه به مختصات های جدید
برسی و پردازش برخورد اشیا و انجام عمل و دستور مناسب و...
و...

خلاصه تمام بار پردازش برنامه بر دوش این متد است.

(
اگر شما هر یک از متدهای قبلی را سنگین بنویسید و در آنها دقت کافی نکنید، خیلی ایراد ندارد، چون انها یکبار اجرا میشوند و فوقش برنامه میخواهید 5 ثانیه ای لود شود 6 قانیه ای لود میشود!

ولی این متد و متد بعدی حیاتی هستند.
این متد و متد بعدی مدام توسط XNA در یک حلقه تا تمام شدن برنامه اجرا میشوند و شامل همان بحث بازدهی و حلقه های پنهان میشود.
این دو متد ضمن پیاده سازی تمام نیازها باید تا حد نهایی خود سبک و سریع الاجرا باشد و از هر ترفندی برای افزایش بازدهی و سرعت در انها استفاده کرد.
)

چون این متد بار پردازشی زیادی دارد در جهت شفافیت کدها و لایه بندی و استفاده از قدرت شی گرایی میتوان کد این بخش را در کلاسهای مجزایی شکست و از واسط XNA.IUpdateable هم در انها استفاده کرد و در این متد فقط این کلاسها فراخوانی شوند.

مثلاً ...
یک کلاس مجزا فقط برای کنترلر و گرفتن فرامین کاربر و map کردن انها به فرامین برنامه
یک کلاس مجزای دیگر جهت محاسبه و کنترلر موقعیت دوربین با توجه به شرایط و فرامین کاربر.
یک کلاس دیگر جهت مدیریت و کنترلر کاراکتر اصلی بازی (در بازی های اول شخص که بازیکن یک کاراکتر انسانی یا ماشینی نظیر در محیط بازی دارد.)
و...

=====

این متد آرگومانی از نوع XNA.GameTime هم میگیرد که حاوی اطلاعاتی زمانی بازی است که میتواند معیار حرکت و پردازش قرار بگیرید.
مثلاً شاید نیاز باشد شی ای از نقظه A به B رود ولی این حرکت نباید لحظه ای باشد و نباید در رایانه قوی تر و سریعتر و رایانه ضعیف تر و کندتر فرقی کند، مثل حرکت یک خودرو
در مواردی از این دست میتوان از XNA.GameTime پاس داده شده در پردازش ها استفاده کرد.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

==============

متد Draw
این متد از خیلی از لحاظ شبیه متد قبلی است ولی شما در این متد وظیفه نوشتن دستورات ترسیم برای هر فریم را دارید.
بازدهی هم در این متد بسیار مهم است و باید تمام کنترلرهای دوبعدی و اجزای سه بعدی و زره ای در این متد ترسیم شوند.

برای یک برنامه حقیقی این متد هم میتواند بسیار طولانی و پیچیده شود و اصل نگه دارید کد را کاهش دهد.
نتیجتاً در جهت استفاده از امکانات شی گرایی میتوانید موارد مختلف را یک کلاس مجزا با واسط XNA.IDrawable کنید و هر ترسیم را جدا کنید.
یک کلاس برای کنترلرهای دوبعدی روی صفحه ...
یک کلاس برای کاراکتر سه بعدی بازیکن (برای بازی های اول شخص)
یک کلاس برای رسم زمین و آسمان
و...

هر بخش که دیدید دارد پیچیده میشود یا منطق شی گرایی برنامه تان اقتضا میکند میتوانید یک کلاس دیگر و مجزا کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

==============

کدهای فوق به همراه نمونه کد ساده رسم دوبعدی در قالب پوشه XNAEmpty به نمونه کدهای پک تاپیک افزوده شده.
support.h02.ir/fwlink/?LinkId=1005808167

در سطح pm ، دوستان در خصوص pdf شده مطالب همین تاپیک پرسیده بودند، که متاسفانه و با عرض شرمندگی هنوز حاضر نشده.
تصمیمم بر این است که کلیه مطالب تاپیک را pdf کنم ولی وقت نکردم.

موفق باشید.

Payman_62
12-09-2009, 15:23
سلام.
دوستان و به خصوص h2 عزیز از زحماتتون تشکر میکنم.
جناب h2 تاپیک مفیدیه. فکر میکنم بهتر بود تاپیک رو مهم میکردید. به هر حال من این کار رو کردم.
ضمنا پست های بی ارتباط رو که مشاهده میکنید پاک کنید تا تاپیک اختصاصی این مطالب بشه.

دوستان لطفا از ارسال پست برای تشکر یا سوال یا مطالب بی ربط خودداری کنید.

L u K e !
17-09-2009, 15:31
محمد اقا فکر نمی کنم اینجا کسی با Vb.net xna کار کنه
خوب Xna مخصوص C# هست و در VB کاربرد چندانی ندارد
و لازم نیست کدهاتون رو به زبان VB بزارید
یه چیز دیگه بدون Content چطوری می شه Spritefont یا Model یا ... رو Load کرد ؟



اگه می شه یکم در مورد این حلقه هایی که زیاد اجرا می شن بگین ، چطورین ؟

_H2_
01-10-2009, 13:15
سلام
تریسمات دوبعدی XNA در واقع محدود به تصویر دوبعدی است.
البته امکان ساده ترسیم متن هم وجود دارد ولی در واقع خود متون هم توسط XNA به تصویر دوبعدی تبدیل شده و به هسته ترسیم ارسال میشوند.

محور مختصات برای ترسیمات دوبعدی هم همانطورکه در مطالب قبلی بیان شد، به صورت شکل زیر است.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

برای ترسیمات دوبعدی نیاز به تعریف یک نمونه از شی XNA.Graphics.SpriteBatch است.
نمونه سازی این شی میتواند با کدی مثل این و یکبار در شروع برنامه (یعنی متد XNA.Game.Initialize یا XNA.Game.LoadContent) صورت بگیرید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

متدهای ترسیمی XNA.Graphics.SpriteBatch طبیعتاً باید در متد XNA.Game.Draw کدنویسی شوند.
- متد Begin
این متد باید اجباراً قبل از انجام هر ترسیم دوبعدی توسط این کلاس و یکبار فراخوانی شود.

- متد End
این متد باید اجباراً پس از انجام همه ترسیمات دوبعدی و در پایان کار ترسیم دوبعدی و یکبار فراخوانی شود.

- متد Draw
این متد وظیفه ترسیم تصاویر دوبعدی را بر عهده دارد.
(همانطور که در پست قبلی بیان شد تصاویر را میتوانید در Content قرار دهید و با کدی که بیان شد بارگذاری کنید)
این متد Overloads های متعدد دارد که در اینجا به اختصار به توضیح هر پارامتر با نامش خواهیم پرداخت:

texture As XNA.Graphics.Texture2D
شی تصویری که باید ترسیم شود.

position As XNA.Vector2
موقعیت دوبعدی نقطه شروع ترسیم در روی صفحه نمایش

sourceRectangle As XNA.Rectangle
محدوده مربعی از فایل تصویر اصلی که باید ترسیم شود، اگر محدوده ای داده نشود کل تصویر ترسیم خواهد شد.
با کمک این پارامتر میتوانید یک تصویر بزرگ داشته باشید که از بخشهای مختلف آن در جاهای متعدد برنامه با دادن مختصاتش استفاده کنید.

color As XNA.Graphics.Color
فیلتر رنگی برای ترسیم که به عنوان نمونه میتوانید تصویر را نیمه شفاف ترسیم کنید.

rotation As Single
یک زاویه چرخش به رادیگان را دوران ترسیم مشخص میکند.

origin As XNA.Vector2
یک نقطه مختصات مبنا برای ترسیم مشخص میکند.

scale As XNA.Vector2
یک عدد تناسب برای هر بعد ترسیم مشخص میکنند.
(
در واقع همان بزرگنمایی و Zoom است که به درصد و یک صدم الفاظ گفتاری انسانی است (!)
مثلاً عدد 0/75 یعنی همان 75% خودمان که باعث کوچک شدن تصویر میشود
)

- متد DrawString
این متد وظیفه ترسیم متون یا همان نوشته و String را بر عهده دارد.
البته اگر نوشته هایی در برنامه شما ثابت و فیکس و همیشگی هستند شاید بد نباشد که آنها را به تصویر png تبدیل کنید و با همان متد Draw ترسیمش کنید.
(این متد و ترسیم متون در پست بعدی بررسی خواهد شد.)



برای کد نمونه و سمپل همانطور که در پست قبلی بیان شد:


کدهای فوق به همراه نمونه کد ساده رسم دوبعدی در قالب پوشه XNAEmpty به نمونه کدهای پک تاپیک افزوده شده.
support.h02.ir/fwlink/?LinkId=1005808167


==============

ترسیمات دوبعدی به کمک ghnet.xna.dll

چندنکته در استفاده از ghnet.xna.dll
1) کلاس اصلی شما به جای وراثت از XNA.Game باید از GHNet.Xna.Engine وراثت بگیرد.

2) در جهت سرعت بیشتر مستقیماً اکثر خود فیلدهای کلاسها در dll مذکور Public و در دسترس هستند و برای خواندن از انها Property-Get و لایه اضافه ای وجود دارد تا سرعت به حداکثر ممکن برسد ولی برای تغییر این فیلد ها باید از متد های SetXXXXX استفاده کنید.
(این عمل کدنویسی مطمئنی نیست و توصیه نمیشود و عامل خطای انسانی را به شدت افزایش میدهد ولی اول انکه قصد نداشتم dll مذکور باعث افت سرعت شود و دوم هم اصلاً قصد انتشار عمومی dll مذکور را نداشتم.)

کد اشتباه در استفاده از ghnet.xna.dll

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کد صحیح در استفاده از ghnet.xna.dll

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

در ghnet.xna.dll مکانیزمی بسیار شبیه خود دات نت در مدیریت فرمهای ویندوزی پیاده سازی شده.
شما میتوانید مثل طراحی فرمها کنترلرهای متعدد دو بعدی روی برنامه داشته باشید که وراثتی از GHNet.Xna.Drawable2D هستند.
کافی است کنترلر را بسازید و خصیصه ها را Set کنید و رویدادهای مورد نیاز را هندلر کنید و در نهایت ان را به مجموعه Objects اضافه کنید.

کلاس GHNet.Xna.Drawable2D خصیصه های تنظیمی فراوانی دارد و حتی مدیریت رویدادگرایی ماوس را هم دارد.
در ضمن امکان تغییر تصویر پسضمینه با توجه به وضعیت ماوس را هم دارد (غیر فعال-فعال-ماوس روی کنترلر-ماوس فشرده شده)

مثلاً برای داشتن یک دکمه دو با قابلیت کلیک و کدنویسی برای زمان کلیک میتوان همچین دستوراتی نوشت:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خط اول) کنترلر را میسازد.
خط دوم) تصویر را از Content بارگذاری و تحویل میدهد.
خط سوم) اجازه تغییر پس ضمینه را با 4 تکه کرد افقی تصویر میدهد. (به سمپل دانلودی دقت کنید.)
خط چهارم موقعیت و ابعاد کنترلر را تایین میکند.
خط پنجم) رویداد کلیک را هندلر میکند
خط شش) کنترلر را به Objects اضافه میکند

=====

در نهایت برای ترسیم اشیای دوبعدی داخل Objects باید متد (Draw2D(gameTime در داخل متد Draw اصلی کلاس اضافه شود.
پروژه نمونه در همان پک support.h02.ir/fwlink/?LinkId=1005808167 موجود است.

==============


فکر نمی کنم اینجا کسی با Vb.net xna کار کنه
من مثل شما مطمئن نیستم.
اول آنکه خود من پروه سه بعدی را قبول کردم که با XNA انجام دادم و با تاکید و سفارش مشتری که سورس VB.Net میخواست من هم برایش با VB.Net نوشتم.
دوم انکه (همانطور که احتمالاً متوجه شدید) دوستان و همکاران VB.Net کار همچنان در این تالار و انجمن حضور فعال دارند.

پست چهارم ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) همین تاپیک:


کاملاً برای استفاده در دات نت مجهز و آماده و یک دست است ولی برای سایر زبانها و محیطهای غیر دات نتی قابل استفاده نیست



خوب Xna مخصوص C# هست و در VB کاربرد چندانی ندارد
پست سوم ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) همین تاپیک:


گرچه به ظاهر زبان کاری XNA زبان C#.Net است ولی جالب است که اگر جستجو کنید حتی سایتهایی پیدا میکنید که در خصوص طراحی بازی با XNA تحت Delphi.Net آموزش داده اند!


پست چهارم ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) همین تاپیک:


در واقع XNA خیلی شبیه خود Framework است، چیز عجیب غریبی نیست!
یک مجموعه از کلاسهای آماده است که حدودا (و کیلویی !) یک سوم Framework2.0 میشود به پروزه شما Reference میشوند و شما میتوانید از آن کلاسها و متدها استفاده کنید.



یه چیز دیگه بدون Content چطوری می شه Spritefont یا Model یا ... رو Load کرد ؟
اگر منظورتان در VB.Net است این مسئله کامل در پست 15 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) بررسی شده و پک فوق العاده کوچکی معرفی شده که این مشکل را در VB.Net بکل حل میکند.
و حتی اگر VB.Netر ا نصب داشته و سمپلهای این تاپیک را باز کرده باشید، متوجه میشدید که پروژه های VB.Net این تاپیک حاوی Content کامل و عین C#.Net هستند.
یک نسخه کامل پروژه تبدیل شده به VB.Net هم در پست 15 موجود است (تبدیل شده با همین سایتهای معمولی تبدیل کد)


اگه می شه یکم در مورد این حلقه هایی که زیاد اجرا می شن بگین ، چطورین ؟

گمانم توضیحات کافی بوده؟؟؟
این مطالب در پست های 20 تا 30 بررسی شده اند.
باز هم چشم، کوتاه به عنوان نمونه و مثال عرض میکنم:
نمونه های متدهای اجرای مکرر در خود XNA میتواند متدهای Update و Draw باشد که تا اخر برنامه مدام اجرا خواهند شد.
نمونه های حلقه های پنهانی سایر کدها هم میتواند دسترسی به عناصر داخل یک Collection-Dictionary باشد که معمولاً کلیدی داده شده و Collection در داخل خود حلقه را اغاز میکند تا عنصر نظیر ان کلید را پیدا کند.

پست 20 -> سرعت و بازدهی کدهای مختلف 1 -> رابطه خصاصت و تنبلی و تعریف متغییر !
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

=====

سعی میکنم پست بعدی در خصوص ترسیم متون را هر چه سریعتر (تا حد امکان در دو الی سه روز اینده) حاضر کنم و این بحث را بسته و به سراغ فضای سه بعدی و کنترلر دوربین برویم.
موفق باشید.

_H2_
19-12-2009, 18:47
سلام

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
فرا رسیدن ایام سوگواری، شهادت سالار شهیدان حضرت ابا عبدا... الحسین (علیه السلام) را به دوستان خودم تسلیط عرض میکنم.
باز این چه شورش است که در خلق عالم است /// باز این چه نوحه و چه عزا و چه ماتماست
باز این چه رستخیز عظیم است کز زمین /// بی نفخ صور خاسته تا عرش اعظماست
... (محتشم کاشانی)


خودمانیم، این پست های من هم همش می افتد وسط یک مناسبتی!!!

==============

فونت در XNA:
برای ترسیم متون و نوشته ها طبق عادت ویندوزی نیاز به Font است.
ولی Font در XNA تفاوتهای پیاده سازی با انچه قبلاً دیده بودید دارد.

برای اضافه کردن فونت و استفاده از فونت های رایانه شما باید یک فایل spritefont.* به پروژه تان اضافه کنید.
برای ان کار آیتم Content را SolutionExplorer انتخاب کرده و فرامین زیر را دنبال کنید:
Project->Add New Item->Sprite Font

فایلی که خواهید دید یک XML است که در واقع نام و مشخصات فونت دلخواه شما باید در ان درج شود.
چیزی شبیه این:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(فاصله (Space) بین اعداد را حذف کنید. بدون فاصله اینجا خراب نشان داده میشد.)

[[[
(اختیاری)
اجازه دهید کمی بیشتر در مورد ساختار داخلی پردازش فونت ها در XNA بدانیم ...
Pipline مربوط به SpriteFont در XNA در واقع از این XML فقط به عنوان تنظیمات استفاده میکند و xnb.* نهایی کاملاً متفاوتی میسازد.
در زمان کامپایل و با توجه به مشخصاتی که در XML تان درج کرده اید XNA پردازشی حلقه ای را شروع میکند و یک تصویر png مانند بزرگ تولید میکند که همه کاراکترهای مورد نیاز فونت مورد نظر شما در روی آن رسم شده اند ...

یک تصویر که پر است از حروف الفبا و علائم و نشانه ها ...
و در واقع این تصویر است که به xnb.* نهایی تبدیل شده و به پروژه شما اضافه میشود.
و در واقع در زمان ترسیم XNA می آید و محل کاراکتر به کاراکتر String شما را در این تصویر طبق یک جدول Sort شده و سریع به دست اورده و یک دستور ترسیم تصویر روی صفحه برای همان یک کاراکتر و در محلهای مشخص فایل تصویر فونت و صفحه نمایش اجرا میکند و بعد کاراکتر بعد ...

این الگوریتم چندین پیامد منطقی دارد:
]]]

1) مثل برنامه های عادی ویندوزی و وبی نیاز به وجود فایل فونت در مقصد نیست و در واقع فایل فونت شما همان xnb.* است که همراه exe تان قرار دارد، نتیجتاً میتوانید با خیال راحت و بدون نگرانی از هر فونتی که دوست دارید استفاده کنید.

2) فونت های شما در هر سیستم Windows و XBox و Zune با بالاترین تضمین و بدون نگرانی کار خواهد کرد.

3) فونت و سایز و حتی محدوده کاراکتری مورد نیازی که قصد استفاده از آن را دارید باید در زمان کامپایل مشخص باشد ولی میتوانید به تعداد دلخواه spritefont.* داشته باشید.

=====

مطلب مهم دیگری که وجود دارد ان است که اگر قرار است متن همواره ثابت و مشخصی را در محیط سه بعدی خود استفاده کنید که تغییری ندارد، از نظر بازدهی و سرعت و حتی گرافیک بهتر است متن مورد نظر را خود به وسیله برنامه های کمکی مثل Paint.Net یا Photoshop و... به فایل تصویر شفاف با فرمت png تبدیل کنید و سپس به جای دستور ترسیم متن، در کدها دستور ترسیم تصویر را در مختصات مورد نظر بدهید.
این کار هم خیلی مطمئن تر است و میتوانید به سادگی به متن سایه و سایر افکت ها را بدهد و هم سرعت و بازدهی ترسیم هم بیشتر خواهد بود.

=====

و اما کد ...

برای رسم باز هم نیاز به یک SpriteBatch و استفاده از متد DrawString وجود دارد.
متد DrawString:
یکی از ساده ترین Overload های این متد چهار پارامتر میگیرد.
spriteFont As XNA.Graphics.SpriteFont
که همان شی فونت بارگذاری شده است.

text As String
که متنی است که باید نمایش داده شود.

position As XNA.Vector2
محل نمایش متن است

color As XNA.Graphics.Color
رنگ متن است.

طبق معمول برای بارگذاری xnb.* ها از Content میتوانید در متد LoadContent عمل کنید و در متد Draw هم ترسیم مورد نظر را انجام دهید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این کد فایل فونت xnbfontfilename.spritefont را بارگذاری کرده و متن "Microsoft XNA Game Studio 3.1" در مختصات صفر و صفر ترسیم میکند.

=====

ترسیم متن با کمک GHNet.Xna.dll:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

=====

ترسیم متون فارسی و RightToLeft:
همانطور که گفته شد سعی کنید تا حد امکان برای متون ثابت از تصاویر png استفاده میکنید. متاسفانه XNA3.1 جاری از ترسیم Runtime اعداد و متن فارسی RightToLeft پشتیبانی نمیکند.
ولی جای نگرانی هم وجود دارد. میتوان با کدنویسی این قابلیت را اضافه کرد.

تابعی در GHNet.Xna.dll و در مسیر GHNet.Text.PersianText.GetDrawablePersianText وجود دارد که قابلیت مذکور را ارائه خواهد کرد.
شما میتوانید بدون استفاده از سایر امکانات این dll فقط با همین یک تابع مشکل نمایش متون Runtime فارسی را حل کنید.

قبل از بررسی کد لازم است فایل spritefont.* مجاز را برای ترسیم کلیه حروف استاندارد زبان فارسی بررسی کنیم.
همانطور که میدانید بخش CharacterRegion در XML این فایل محدوده کاراکترهای مورد نیاز را ثبت میکند که باید کاراکترهای فارسی را به آن اضافه کرد.

یک فایل spritefont.* صحیح با پشتیبانی هم کاراکترهای استاندارد انگلیسی و هم فارسی میتواند چیزی شبیه این باشد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(فاصله (Space) بین اعداد را حذف کنید. بدون فاصله اینجا خراب نشان داده میشد.)

که چهار بخش قسمت پر رنگ آخر، حروف و کاراکترهای فارسی را طبق استاندارد جهانی Unicode اضافه میکند.
(البته میتوان فاصله بین 64345 تا 64378 که حدود 33 کاراکتر است به هم چسباند و یک تکه کرد کار را ساده تر میکند ولی فایل .*xnb نهایی را کمی حجیم تر میکند.)

اما کد لازم:
استفاده از تابع GHNet.Text.PersianText.GetDrawablePersianText خیلی ساده است.
همانطور که گفته شد برای ترسیم عادی یک متن میتوان از کدی شبیه این استفاده کرد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا برای ترسیم حروف و متون مخلوط فارسی و انگلیسی بعد از اضافه کردن Reference فایل GHNet.Xna.dll کدی مثل این کافی است:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که نتیجه این کد نمایش متن "برنامه نویسی با XNA نسخه 3" خواهد بود.
(میتوان برای بازدهی بیشتر خروجی این تابع را هم کش کرد)

البته اگر کسی بخواهد از امکانات کامل GHNet.Xna.dll و کلاسهای GHNet.Xna.Engine و GHNet.Xna.Drawable2D و... استفاده کند، برای پشتیبانی فارسی و RightToLeft فقط کافی است EnabledRightToLeftPersianText لایه مورد نظر را True کند.
(خود کلاس Drawable2D برای بازدهی بیشتر کش را انجام میدهد)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کد نمونه مرتبط با مباحث این پست را میتوانید در پک مختص این آموزش پیدا کنید:
support.h02.ir/fwlink/?LinkId=1005808167

==============

از دوستان و سروران عزیز خودم در سایت واقعاً عضر خواهی میکنم که تکمیل تاپیک زمان بر شده است. :11:
متاسفانه حجم کار شخصی ام زیاد است و تهیه این مطالب هم به وقت خالی یک تکه ای نیاز دارد تا بتوان پیوستگی مطالب را تضمین کرد.

انشاا... با صبر دوستان تاپیک همچنان ادامه دارد.
جمیعاً موفق و پیروز و سربلند باشید.

_H2_
02-01-2010, 14:35
سلام
فعلاً و بدون توضیحات یک سمپل بسیار ساده نمایش شی سه بعدی طراحی شده در 3DS-MAX را به پک مخصوص تاپیک اضافه کردم.
خیلی ساده است ولی امیدوارم مفید باشد.

این سمپل در قالب چهار پروژه ارائه شده است.
دو سمپل با VB.Net و دو سمپل با C#.Net
دو سمپل با ghnet.xna.dll و دو سمپل بدون آن.
که در نهایت میشود چهار پروژه نمونه برای یک کار ثابت.
(Ship_CS و Ship_VB و Ship_GHNet_CS و Ship_GHNet_VB)

خروجی دیداری هر چهار پروژه دقیق مثل یکدیگر است، یک ناوچه جنگی طراحی شده با 3DS-MAX است که در برنامه و از محور وسط (حول محور Y) با سرعت یک دور در شش ثانیه میچرخد.

در پوشه یا دایرکتوری _EXE_ میتوانید نسخه های کامپایل شده و exe سمپل ها را پیدا کنید.


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

(((
لینک دانلود معرفی شده در پست اول: (حجم تا این پست و فعلاً 2MB)
support.h02.ir/fwlink/?LinkId=1005808167
)))

روز خوش.
:10:

cd3
07-04-2010, 08:41
سلام یک سوال...............
می خواستم بدون از XNA فقط برای بازی استفاده می شود یا کار دیگه میشه باهاش انجام داد؟ اگر می شه مثال بزنید :10:

_H2_
09-04-2010, 00:04
سلام

می خواستم بدون از XNA فقط برای بازی استفاده می شود یا کار دیگه میشه باهاش انجام داد؟

پست اول:

... تولید برنامه های سه بعدی از قبیل شبیه سازها و بازیهای رایانه ای ...

خیلی واضح است.
هر چیزی که نیاز به گزافیک پیشرفته دو و سه بعدی داشته باشد.
معمولاً بازی ها و برنامه های شبیه ساز را شامل میشود.
شبیه سازی یک ساختما یا خودرو و ... قبل از ساخت و طراحی سه بعدی در رایانه !
برنامه های شبیه سازی آموزشی، مثل شبیه سازهای کابین های خلبان و یا حتی شبیه سازهای تاثیر قوانین فیزیک و رویدادها روی اجسام با قوانین و الگوریتم های خاص و سفارشی محاسباتی.

XNA رابط زبانهای دات نتی با DirectX برای استفاده از کارت گرافیک و نمایش محیط سه بعدی (و دو بعدی) و همچین مدیریت اصوات در یک فضای سه بعدی مجازی است.

ولی در ضمینه دو بعدی واسط دم دست تر +GDI هم وجود دارد.

عــــلی
14-04-2010, 20:18
سلام دوستان خسته نباشید.
چند تا Sample براتون آپ کردم ای شالله مورد استفاده قرار بگیره.

کار با سایه و نور:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ُُکار با Sample آب:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بدون شرح !!!:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق باشید و سربلند:11:.

عــــلی
21-04-2010, 21:12
سلام.

Corsur جالب ماوس:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Sample راعد و برق:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اینم Sample جالب نور:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

عــــلی
21-04-2010, 21:26
سلام خدمت همه عزیزانی که XNA رو شروع کردند یا میخواهند شروع کنند.

چندتا آموزش فارسی آموزش XNA براتون پیدا کردم و آپلود کردم میزارم واسه دانلود انشاالله که بردر همه عزیزان بخوره:


1.به كار گيري و سه بعدي كردن فايل هاي صوتي در XNA:

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



2.ايجاد تغيير شكل در محيط:

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



3.مقدمه اي بر ايجاد بازي شبكه اي:

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



4.آموزش XNA:

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


5.آشنايي با XNA:

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق و سربلند باشید دوستان:11:.

عــــلی
21-04-2010, 22:42
سلام دوستان عزیز خسته نباشید:20:.
کتاب های انگلیسی XNA که داشتم رو براتون اپ کردم حالا با لینک مستقیم و بدون دردسر دانلود کنید.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] de.Jun.2007.JPG

دانلود:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق باشید و سربلند دوستان:11:.

عــــلی
08-07-2010, 14:58
با سلام خدمت دوستان برنامه نويسي و مخصوصاً علاقه مندان به XNA داداش حسن مثل اينكه يه خورده سرش زيادي شلوغ شده من هم همينطور اگه كه به پي سي ميام و به شما دوستان سري ميزنم به خاطر اينترنت دوستامه كه براي اينكار 5 كيلومتر راه رو طي ميكنم!!! يعني اينكه هر وقت منو انلاين تو پي سي ديدين بدونين 5 كيلو متر راه اومدم!!!(البته الان دیگه نه!!!!:46:)
به علت همينه كه خيلي كم كم به پي سي ميام تقريباً هر يه روز در ميان.
خوب بي خيال اين رو گفتم كه بعضي دوستان دلگير نشن از دوستان فعالي كه واقعاً سرشون شلوغه و هيچ بهانه اي ندارن كه بگن ديروز نتونستم بيام يا فردا نميام.

ديروز نشستم سر كد نويسي يه الگوريتم نوشتم كه بتونم با اون سرعت برنامه ها رو كنترل كنم و همين طور كه توي كد هام تغييرات ايجاد ميكنم ببينم كه كجاي كد ها بازدهي و سرعت كمتر و كجاي كدها بازدهي و سرعت بيشتري دارن.
حقيقاتاً من تمام پست هاي داداش حسن رو خوندم توي اين تاپيك و تمام كد هاشونو امتحان كردم و متوجه اين موضوع مهم شدم كه چقدر سرعت برنامه بالا و پايين ميشه و همه اينها بستگي به كد نويسي شما برنامه نويسان با تجربه داره و كسي كه اين موضوعات مهم رو ندونه توي برنامه هاي بزرگ دچار مشكلاتي ميشه كه بعد اتمام برنامه بلايي سر برنامه نويس مياره كه از كوه كندنم سخت تر ميشه.
البته اين بلا سرم اومده!!!:27:

شايد بيشترين سرعت رو توي برنامه كدهايي ميگيرن كه عمليات رياضي رو توش انجام بدين چون به حال اگه سي پي يوي سيستم شما حتي 48 هسته اي هم باشه بايد اين عمليات رياضي رو انجام بده و اگه 48 تا حلقه while (true) توي سي پي يو هاي بد بخت اين سيستم بزارين ميبينين كه سيستم دومشو ميزاره روي كولشو از خونه شما فرار ميكنه!!!!
امروز ميخوام كاربرد و استفاده از شرط (if) رو توي جلوگيري از هر نوع عمليات رياضي كه بيخودي انجام بشه بگم و اين به من ثابت شده كه كلي از سرعت برنامه هاتون بالا ميره وقتي كه شما از عمليات رياضيي كه به برنامه جواب تكراري برميگردونه با يك شرط جلوگيري كنيد.
و اين عمليات كاملاً آشكاره مثلاً شما وقتي يك struct رو به صورت ref ‌آرگومان ميدين شايد 2 درصد از سرعت بالا بره ولي عمليات رياضي چندين برابر سرعت رو پايين مياره براي مثال به كد زير نگاه كنيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كاري به كدهاي ديگه نداشته باشين كه درسته يا اشتباه اين فقط يك مثاله.
كدهايي كه الان براي ما مهم هستن خط هاي زير هستن:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

همه ميدونيد كه تا زماني كه حلقه بالا ميچرخه متدهاي GoToPercent و GetCosine كه عمليات رياضي سنگيني توشون هست اجرا ميشن.
حالا ما با چه كدي عمليات رياضي بالا رو طوري بنويسيم كه سرعت برنامه ما در حلقه بيشتر بشه و نصف سرعت برنامه ما بره بالا.

دو متغير عمومي تعريف كنيد بالاي متد GoToPercent به صورت زير:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا متد GoToPercent رو كاملاً تغيير بديد كه كل كدهايي كه تغيير داديد به صورت زير ميشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

الان با جايگزيني متد ها سرعت برنامه تون دو برابر بالا رفته!!!!
تعجب نداره چون شما در كد بالا فقط از عمليات رياضيي كه تكراري انجام ميشدن جلوگيري كردين.

البته اينو هم بگم كه تقسيم دو عدد (Max / Go) در كد هيچوقت عدد اعشاري نميشه چون دو متغیر از نوع اعشاري نيستن و اگه اعشاري بودن نوشتن كدي كه گفتم فايده اي نداشت چون تقسيم دو عدد هميشه با عدد قبلي فرق ميكرد.
از قول داداش حسنم(_H2_) بگم که سرعت و بازدهی کد رو بیشتر عملیات ریاضی مثل Cos و Sin میگیرن.و اگه بتونید جلوی تکرار این عملیات رو بگیرین که تقریباً غیر ممکنه چون خیلی کم تکراری پیش میاد شایدم اصلاً نیاد دیگه ....
موفق باشيد و پيروز:11:.

sinashahab
21-07-2010, 13:15
سلام

خيلي خوبه !!

من از اين تايپتون خيلي خوشم اومد .

فقط يه سوال برام پيش اومد فقط نخنديد :31::

كامپوننت يا چيزي نداره كه بشه باهاش توي محيط حركت كرد ؟

JahanaraCo
25-08-2010, 09:43
سلام من می خوام پیشنها بدم شروع کنید به نوشتن یه کتاب با این همه اطلاعاتی که دارید
یا تر جمه :8:
خیلی خوبه ملت هم داعا تون می کنن یا اصلا یه وب سایت تخصصی همه کاراش هم با من من تخصص دارم توی این ضمینه :5:
یا علی

parsgulf
23-09-2010, 10:19
با حرکات دوربین ها میشه در محیط حرکت کرد

_H2_
28-09-2010, 00:09
سلام
یک هفته ای است،نسخه نهایی XNA4 هم عرضه شده.
لینکهای دانلود با رنگ مشخص پست پنجم اضافه شدند. ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
نکته قابل توجه آنجاست که XNA3 روی VS2010 نصب نمیشد که مشکلی چشم گیری بعد از عرضه VS2010 بود و در واقع مایکروسافت منتظر تکمیل XNA4 بود.

این مطلب بنابر رویه و به صورت مجزا در تاپیک خبرنامه انجمن هم منتشر شد. ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

پک مناسب برای VB2010 را هم در زمان انشار XNA4Beta حاظر و آزمایش کردم و اصل کارش تمام شده ولی برنامه نصب جدید حاضر نیست و قصد داشتم حاظر کنم و بعد پست جدید بزنم که دیگر دیدم بیشتر نمیتوان منتظر ماند و خبر از تازه بودنش می افتد.
پک VB2010 هر موقع وقت کردم و حاظر شد، اعلام خواهم کرد.


==============


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

مدتی است به سمپل اصلی تاپیک یک کد جدید برای تشخیص کلیک ماوس در صحنه هم اضافه شده.
این کد براساس محاسبه مکعب مستطیل محاطی شی کار میکند و تشخیص میدهد ماوس روی چه شی ای کلیک شده.
(سمپلهای تاپیک همچنان تحت XNA3.1 هستند.)

این پروزه نمونه ساده ای از محاسبه برخورد با کمک مکعب مستطیل فرضی دور شی است. (BoundingBox)
ولی روش کره (BoundingSphere) کاربرد و بازدهی خیلی بیشتری دارد.

در برنامه واقعی پیشنهاد میشود، حتماً اول برخورد تمام اشیا با روش BoundingSphere آزمایش شود و در صورتیکه برخورد فرضی در این مرحله تشخیص داده شد، سپس از روش و الگوریتم های دیگر استفاده کنید.
(
همچنین پیشنهاد میشود برخی از محاسبات را که فقط یکبار نیاز به اجرا دارد به یک pipline منتقل کرد تا یکبار در زمان کامپایل محاسبه و نتیجه ان در فایل xnb برای همیشه سریالی شود.
)

کد این پروزه با کوتاه ترین روش ممکن نوشته شده ...
در این کد از یک روش ساده و مطمئنی جهت محاسبه ابعاد مکعب مستطیل فرضی دور شی استفاده شده ولی این روش کند است و بازدهی کمی دارد.


==============

ضمناً پست دوم تاپیک هم با فهرست لینک مطالب به روز شد. ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

دوستان و سروران عزیز در سایت هم سوالاتی مطرح کرده بودند که من با بی ادبی تمام انها را بی پاسخ گذاشتم. :11::11::11:

ضمن عضرخواهی از این دوستان باید عرض کنم که موارد مطرح شده جزء مباحثی هستند که قصد داشتم و دارم که انشا... مثل مطالب قبلی در پست ویژه ای آنها را تشریح و بررسی کنم.

البته این هم خود باز جای عضر خواهی مجدد دارد که تاپیک مدت زیادی خوابیده و بدون مطلب جدید مانده.
باعث شرمندگی است (:11:) متأسفانه مشغله کاری ام بیشتر شده و اجازه نمیدهد ... :11::11::11::11:

آقا یکی این صورت من را شطرنجی کند!
:11::11::11:

موفق باشید.
:10:

_H2_
24-10-2010, 20:56
سلام

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
در محیط DirectX و XNA کنترل کاملی روی دوربین خواهید داشت ولی نباید انتظار شیء خاصی برای دوربین را داشته باشید!

در واقع کل دوربین با تمام پارامترهایش فقط یک ماتریس عادی است.
روی مقادیر و چگونگی ایجاد این ماتریس صحبت خواهیم کرد.

------

همانطورکه قبلا در پست 18 بیان شد. ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
مفهوم دوربین حداقل بر سه بردار اصلی در فضای سه بعدی استوار است.
(یادآوری: هر بردار، سه عدد مشخص x, y, z دارد و مانند یک پیکان نوک تیز در فضای سه بعدی است.)

این سه بردار (9 عدد) همان مقادیری هستند که شما برای حرکت در محیط بازی آنها را به کرات تغییر خواهید داد.
(
بجز سه بردار فوق چند پارامتر تأثیر گذار دیگر هم وجود دارد که معمولا فقط یکبار در شروع برنامه تنظیم و اجرا میشوند.
)


سه بردار دوربین:
1) بردار مکان
این در واقع موقعیت خود دوربین را در فضای سه بعدی مشخص میکند.
مثلا وقت راه رفتن کاراکتر اول شخص، شما این بردار را تغییر میدهید تا دوربین در مکان جدیدی مستقر شود.
(شروع پیکان مبدا مختصات و نوک آن محل دوربین است.)


2) هدف دید
این بردار سمت و جهت دید را مشخص میکند.
(
که برابر است با جمع بردار مکان با بردار جهت دید.
در شرایط و الگوریتم های مختلف گاهاً به جای بردار هدف از بردار جهت استفاده میشود که با توجه به نحوه کنترل دوربین در بازی شاید یکی از این دو ساده تر باشد و اختلاف انها هم فقط در یک جمع و تفریق ساده با بردار مکان خود دوربین است.
فعلاً بدانید که بردار مهم دوم، مکان هدف را مشخص میکند.
)

مثلا وقتی کاراکتر اول شخص شما ایستاده و سرش را به اطراف میچرخاند، این بردار را تغییر میدهید.
(شروع پیکان، صفر مختصات است و پایان پیکان محل هدفی است که دوربین به ان سمت نشانه وری شده است)

3) بردار نرمال
بیشتر اشیا در فضای سه بعدی بردار نرمالی دارند که سمت بالا را مشخص میکند و به نوعی مکان هندسی شی را ثابت میکند.
این بردار در دوریین هم سمت بالا را مشخص میکند.
(شروع پیکان، محل دوربین است و جهت آن سمت بالای دوربین+تصویر را مشخص میکند.)
مثلا شما میتوانید در نقطه باشید و به مکان ثابتی هم نگاه کنید....
ولی در مکان نقطه میتوانید به همان مکان هدف، سروته نگاه کنید! مثل زمانی که روی دستهایتان ایستاده اید!س
یا در بازیهای هواپیمایی وقتی گردش میکند و کل صحنه را کج می بینید، این بردار تغییر میکند.

-----

فعلا امیدوارم حداقل در ذهنتان بتوانید این سه بردار و تاثیر آنها را بر حرکت دوربین و تصویری که کاربر روی مانیتور میبینید درک کرده باشید.

سعی کنید حالات مختلف گردش در محیط سه بعدی و بازی را تصور کنید و در هر مورد ببینید چه بردارهایی باید تغییر کنند.

ساخت ماتریس دوربین:
ماتریس دوربین شی نهایی مشخص کنند دوربین است که از ادقام این سه بردار با تابع CreateLookAt ایجاد میشود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

برای اعمال و استفاده از این ماتریس باید آن را قبل از رندر همه اشیا، تک به تک به خصیصه View شی های (BasicEffect یا مشتقات) آن بدهید.
بدیهی است هر شی که BasicEffect آن تنظیم نشود در رندر این ماترسیس روی آن اثری ندارد.

مثلا در حالت عادی برای رسم یک شی ممکن است همچین کدی نوشته شود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

سمپل این بخش در واقع کد پروژه Ship است که ماه ها قبل در پست 46 اضافه شده بود. :11::11::11: ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اگر دقت کنید متوجه خواهید شد که ماتریس دوربین در این پروزه ثابت است و یکبار در شروع برنامه در متد Initialize مقداردهی شده است.

(((((
گردش کشتی در این پروژه ناشی از دوران ماتریس modelmatrix خودش (خود کشتی) در متد Update است.
یک سوال! میتوانید هم اسمش را تمرین بگذارید!!!
سعی کنید در پروژه Ship ماتریس modelmatrix را ثابت کنید (در واقع خود شی را ثابت کنید) و به جای آن دوربین، (یا همان ماتریس cameramatrix را) طوری در متد Update اصلاح کنید که دوربین دور کشتی یا همان ناو بچرخد؟؟؟

با انجام و یا حداقل سعی در انجام این کار ساده، خیلی خوب با توابع ریاضی و درک فضای سه بعدی درگیر خواهید شد و میتواند شروع خوبی برای درک دوربین باشد.
بعد هم به راحتی میتوانید دوربین را در جهت دیگری گردش دهید یا کنترل آن را به دست کیبورد یا ماوس بسپارید و...

اگر به فرض این کار را صحیح انجام دهید، نباید در اجرای برنامه تفاوتی حاصل شود.
چرا؟
چون فقط یک شی (همان ناو یا کشتی) در صحنه وجود دارد و دوران آن حول خودش با چرخیدن دوربین دورش تفاوتی از دید ناظر پشت لنز ایجاد نمیکند.
ولی اگر یک شی دیگر به صحنه اضافه شود (:46:) آنگاه تفاوت چرخیدن یک شی دور خودش با چرخیدن دوربین دور محیط مشخص میشود.
)))))


=====

در پست های بعدی باید دقیق تر به این مسئله بپردازیم و کمی هم درمورد الگوریتم های خاص کنترل دوربین در بازی یا برنامه های اول شخص ، سوم شخص و هواپیمایی صحبت کنیم.
هر کدام از این سه الگوریتم و کنترل خاصی را بر دوربین دارند.

موفق باشید.
:10:

amir_up
19-01-2011, 09:08
سلام. اين تاپيك بسته شده؟ يا اينكه ديگه به روز نميشه؟
اين تاپيك محشره و حرف نداره.
دسته همه درد نكنه و اميدورام كه باز ادامه داشته بهشه.

MosaferJade
04-03-2011, 12:25
سلام
این تایپیک بسته نشده فقط با توجه به وقت کم جناب _H2_
هر از چندگاهی مطالبی رو می زارن که دستشون هم درد نکنه
سال 2009 اگه اشتباه نکنم درست شده وقتشون واقعا کمه
که تو مدت 2 سال فقط 6 صفحه شده

واقعا عالیه

عــــلی
07-03-2011, 11:21
سلام دوستان:11:.
تاپیکمون یکم خاک گرفته بود گفتم یه گردگیری کنم:10:.
آموزش های این پست همه انگلیسی هستند.
دوتا کتاب آموزش Xna به انگلیسی:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

دانلود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آموزش های تصویری XNA Game Studio:

1.معرفی:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید2.ایجاد پروژه ها لینک کردن XNA و XSI:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید3.ایجاد یک مدل ساده:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید4.نمایش مدل ساده در XNA:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید5.تکسچر برای XNA:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید6.کار با Bridge (ساخت مدل برای قسمت 6)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید6.2.آموزش Rigging, Weighting, and Animating:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید7.ساخت بازی:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید8.ساخت آهنگ:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید9.صدا در XNA با استفاده از XACT:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدGathering Input from Guitar Controller.10:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدProgramming Input / Final Code Walkthrough.11:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید12.برنامه نویسی برای XBox 360:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یه سری آموزش در مورد XNA دارم دانلود میکنم که حدود 2 گیگ میشه.
تموم که شد براتون آپلود میکنم:46:.

دوستان در صورت فیلتر بودن لینک های مدیا فایر یک cdn به اول سایت اضافه کنید.
مثلاً:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدالتماس دعا.
موفق باشید.

ali_boujari
04-04-2011, 17:02
دوستان سلام من خیلی وقت پیش ها یکی از کاربران فعال انجمن بودم و اولین آموزش html رو توی این انجمن نوشتم .این تاپیک به نظرم جالب اومد اگه دوستان مایلن سه یا چهار نفری آموزش حرفه ای #c رو شروع کنیم اگر خواستین یه من ایمیل بزنین aliboujar@gmail.com

veluams
15-05-2011, 21:45
سلام.

شما هنوز اولتونه من با این برنامه ها بازی هم ساختم.

چند روز دیگه میاد تو بازار. از شرکت دریا سافت

با اجازه.

nga1471
26-06-2011, 16:01
سلام خوبید ؟

مطالبتون بدرد خورد . فقط یک اشکال دارم . من نمیتونم اسکلت بندی یا یک انسان رو وارد XNA کنم تا با استفاده از انیمیشن اون رو حرکت بدم خیلی فوری قرار به عنوان پروژه بدم به استاد اگه میشه کمکم کنید ممنون از شما

_H2_
06-07-2011, 23:42
سلام
ولادت حضرت ابوالفضل العباس (ع) را که به عنوان روز جانباز هم مشخص شده به دوستانم در این سایت تبریک عرض میکنم.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

مدتها قبل به دوستی قول داده بودم که این مطلب و لینک دانلود و... را اینجا خواهم گذاشت ولی متاسفانه فراموش کردم :11::11::11: و این دوست عزیز هم انگار یادشان رفت.
بحرحال با عضرخواهی از ایشان پست جاری را ادامه میدهم.:11:

یکی دو سالی است که مایکروسافت یک برنامه بازی سازی خیلی ساده بر پایه XNA عرضه کرده، این برنامه چیز خیلی حرفه ای نیست ولی برای یادگیری بازی سازی و همچین ساخت نمونه های ساده بدون تسلط بر برنامه نویسی و کدنویسهای پیچیده، جالب توجه است.

برنامه مذکور مثل اغلب برنامه های بازی سازی ولی در سطحی کوچکتر محیط طراحی زمین بازی را دارد و یکسری کاراکتر و اشیای آماده هم دارد.
در واقع با یک زمان کم و بدون دانش برنامه نویسی اجازه تولید یک بازی کوچک را میدهد.

مجدد لازم به ذکر است که این برنامه بازی سازی با #C و برمبنای XNA ساخته شده است.


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

لینکهای مربوطه:

Wikipedia
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

Microsoft Research
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

Home
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

Download 183MB
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

مجدد عضرخواهی میکنم و شب خوش.

_H2_
17-07-2011, 14:31
سلام
میلاد حضرت مهدی (ع) را خدمت دوستان تبریک عرض میکنم.

می باید در این پست در مورد ادامه "کنترل دوربین" صحبت میکردم (البته خیلی هم بیربط نیست) ولی دوستی چند روز قبل سوالی پرسید که با توجه به تعطیلی موجود تصمیم گرفتم بجای یک پاسخ کوتاه،مطلب کامل تری در غالب یک پست تهیه و بصورت عمومی ارائه دهم.

==============

شاید لزومی به گفتن نداشته باشد که کارت گرافیک و DirectX مسئول ترسیم اشکال شما هستند و این کد شما است که باید اشیا را درست چیدمان کنید تا برخورد تشخیص داده شده و اشیا در هم فرو نروند.

روش مورد بحث در اینجا ساده و موثر است.

برای پیاده سازی ارتفاعات میتوان از یک فایل تصویری سیاه/سفید استفاده کرد.

با این روش ساده میتوان عوارض زمین را تشخیص داد و حتی ترسیم کرد.
میتوانید کاربر اول شخص را مجبور کرد روی زمین حرکت کند و نتواند از شیب زیاد یا دیوار رد شود و...
(((
البته برای ساخت یک شهر با ساختمان و... برای عوارض زمین تکنیک زیر مناسب است ولی شاید نیاز شود ساختمان ها خود هویت مستقل داشته باشند.
)))

در این روش زمین به قطعات کوچک مربعی شکسته میشود و رنگ هر پیکسل در عکس مذکور نشانگر ارتفاع زمین در نقطه معادل است.

برای سادگی و عدم ارتباط با فرمت فایلها معمولا از تصاویر Raw (خام و بی فرمت)

تصاویر Raw بدون هدر میباشند و مستقیما در برنامه با خواندن بایتها قابل استفاده هستند.

نمونه کد مبحث جاری پروژه Ground از همان اینک دانلود قبل دردسترس است،البته اینبار تحت XNA4

در مثال فوق با توجه به داشتن ارتفاع هرنقطه، میتوان حداکثر شیب سعود را مشخص کرد و یا حداکثر تفاوت ارتفاعی که کاراکتر میتواند بپیماید.

اگر کد را دانلود کنید،در نمونه برنامه مورد بحث چند ثابت تاثیر گذار داریم که مختصراً توضیح میدهم

HEIGHTMIN
فاصله ارتفاع کاراکتر بازی را مشخص میکند، بالاخره چه کاراکتر ما یک انسان و چه یک خودرو باشد، کف زمین و روی ارتفاع صفر حرکت نمیکند و یک فاصله ثابت و معقولی به دلیل ارتفاع خودش از زمین دارد که عدد مذکور همین مقدار را مشخص میکند.

MOVESTEP
سرعت حرکت و پیمایش کاراکتر در جلو و عقب رفتن را مشخص میکند که هرچه بیشتر باشد کاراکتر سریعتر حرکت میکند.

ANGLESTEP
زاویه چرخش کاراکتر در حرکت چپ و راست را مشخص میکند که هرچه بیشتر باشد کاراکتر سریعتر گردش میکند.

MOVEHEIGHTMAX
همان فاصله حداکثر تفاوت ارتفاعی است که کاراکتر میتواند از آن بالا برود.
یعنی هر اختلاف ارتفاعی که بیش از این مقدار باشد کاراکتر نخواهد توانست از آن بالا برود.
افزایش این عدد موجب میشود کاراکتر بتواند از هر پستی و بلندی بالا برود.

GROUNDHEGHTMAX
حداکثر ارتفاع زمین است.
یعنی ارتفاع هر نقطه زمین بسته به فایل عکس ذکر شده بین صفر تا این عدد متغییر خواهد بود.
افزایش این عدد موجب مرتفع تر شدن عوارض زمین خواهد شد.

DEFAULTGROUNDFILE
نام فایل raw زمین را مشخص میکند که چندتایی برای دیدن و آزمایش در برنامه قرار دارد و میتوانید امتحان کنید.

برای درک بهتر مطلب، مثلاً اگر آواتار من فایل زمین باشد(!) زمین همچین شکلی خواهیم داشت!

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

یا تصویر سایه سفید زیر، زمین و ساختمانی می سازد که در زیر میبینید.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این هم زمین تولید شده آن:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

البته من فرصت کافی برای تنظیم تصویر (تکسچر) مناسب نداشتم، ضمن اینکه اگر نخواهیم تصویر روکش شده یکنواخت باشد، کمی کدنویسی میخواهد، در نتیجه پروژه را میتوانید در حالت رندر سیمی آزمایش کنید و در چند زمین بازی موجود حرکت کنید و به توقف دوربین در رسیدن به شیب زیاد یا دیوار و... دقت کنید.
(((
البته میتوان فایل زمین را هم مثل هر شی دیگر در برنامه های مدل سازی قوی ای مثل 3DSMAX تولید کرد و در برنامه مصرف کرد که بحث مجزایی میطلبد.
)))

فایل CGround.cs مسئول ساخت زمین و ترسیم و... است و متدی دارد که میگوید هر نقطه زمین چه اتفاعی دارد.

فایل CCamera.cs حاوی توابع لازم برای حرکت و چرخش و کلاً کنترل دوربین است.


در خصوص ساخت زمین بازی از فایل عکس هم توضیح کوتاهی میدهم.
ما به ازای هر پیکسل در تصویر مرجع یک راس ایجاد میکنیم و x و y و z آن را ست میکنیم و نتیجه نهایی کل راس ها را در m_VB میریزیم.
سپس (میدانیم که اصول دنیای سه بعدی بر اساس مثلث ها بنا شده است) در حلقه دیگری چگونگی ترتیب قرار گیری راس های قبلی را طوری که مدام مثلث های کوچکی بسازند تایین میکنیم و در m_IB میریزیم.
(((
با این تکنیک Index یک راس را که شاید عضو چندین مثلث دورش باشد، چند بار تکرار نخواهیم کرد و فقط به ایندکس آن ارجاع میدهیم تا دنباله ای از مثلث ها ایجاد شود.
این کار به نوعی ایجاد یک شی سه بعدی در زمان اجرا است.
)))

کدی که در تابع Update قرار دارد باعث میشود دوربین (یا همان کاراکتر ما) روی زمین جاری بماند و در دیوار هم فرو نرود.

بنظرم بقیه کد واضح است و توضیح خاصی نمیخواهد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
موفق باشید.

عــــلی
24-09-2011, 15:24
بنام خدا..

سلام دوستان خسته نباشید...:10:.
یه مبحثی رو من بعد چند وقت تجربه برنامه نویسی متوجه شدم...چون خیلی وقت پیش(یعنی حدود 6 ماه) دیزاین پترن ها رو خونده بودم الان یادم نمیاد که این بحثی که میخوام بگم رو توی دیزاین پترن ها توضیح داده اند یا خیر...
من میگم اگه که گفتن چه خوب اگه هم که نگفتن چه بهتر....:31:
نمیدونم اسمشو چی بذارم ولی شما از تیتر موضوع باید همه چیز رو متوجه شده باشید.
خوب من یک کد به شما میدم و شما اون رو تست میکنید ان شاءالله و متوجه بحث سرعت و بازدهی خواهید شد به امید خدا.

خوب به کلاس های زیر نگاه کنید:
برای مثال کلاس زیر کلاسی است که شما عملیات پیچیده ی خود را در آن انجام میدهید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدو این هم کلاس معمولی شماست که برای نمایش یا استفاده آن را به در برنامه خود بکار میبرید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدشاید در نگاه اول خیلی ساده و به چشم بیاید......:20:.
اما حالا کد را تست کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدچقدر زمان برد تا فقط 1000 کلاس در حافظه ی سیستم شما قرار بگیرد؟
یک نگاه دیگر به کدها بیاندازید اگر متوجه اشتباه در سیستم کلاس نویسی بالا دیده اید آنرا درست کنید وگرنه ادامه را بخوانید....

روشی که مارا دچار مشکل کرده است مقدار دهی اولیه کدهایمان است....
به پروپرتی زیر دقت کنید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدهمیشه یادمان باشد تا زمانی که از پروپرتی خاصی در کلاسمان استفاده نمیکنیم آنرا بلافاصله مقدار دهی نکنیم...
کد بالا را در کلاس Person پیدا کنید و آنرا اینگونه تغییر دهید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدحال با همان کد اجرایی که قبلاً داده بودم برنامه را تست کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدآیا تغییری در سرعت دیده اید؟:46:.
موفق و سربلند باشید در پناه حق.

_H2_
08-12-2011, 12:02
سلام
پک پشتیبانی XNA4 برای VB را مدتها قبل بروزرسانی کردم و از همان لینک قبلی قابل دانلود بود و ...
بحرحال دیگر مهم نیست!

مایکروسافت بالاخره آپدیت جدیدی برای XNA4 عرضه کرد که ضمن بروز رسانی چند مشکل، قابلیت کدنویسی تحت VB را هم فراهم کرده

در نتیجه دیگر نیازی به عمل خاصی برای پشتیبانی VB وجود ندارد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تاکید میکنم که پک فوق لزوماً مربوط به VB کارها نیستند و دوستان #C کار هم میتوانند این نسخه بروز شده را دانلود و نصب کنند.
موفق باشید.

dariush1373
19-02-2012, 08:50
سلام من داریوش عطایی هستم دستتون درد نکنه
:10:

_H2_
16-05-2012, 01:17
سلام
اگر نسخه پیش تولید آزمایشی Windows 8 را نصب کرده باشید، احتمالاً در نصب XNA و Windows Phone SDK روی VS2010 مشکلاتی داشتید.
این مشکل ناشی از نصب بسته Live Redistributable همراه XNA است که بخشی از اجزاء آن بطور پیش فرض در این سیستم عامل نصب است.

بسته Live Redistributable همراه XNA این مورد را درست تشخیص و مدیریت نمیکند و بخطا میخورد و نصب نمیشود.
XNA هم بدلیل عدم نصب Live Redistributable نصب نمیشود.
Windows Phone SDK هم بدلیل عدم نصب XNA نصب نمیشود! :31:

برای حل مشکل کافی است اول آخرین نسخه Live Redistributable را دانلود و نصب کنید و سپس اقدام به نصب XNA و بعد هم در صورت نیاز Windows Phone SDK کنید.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(نیازی به لوگین نهایی نیست و نصب آن کافی است)
موفق باشید.

M0hsen3D
02-06-2012, 16:23
سلام دوستان هنوزم XNA کار میکنید؟؟؟ میگم واقعا مهمه حالا که XNA تو ویندوز 8 بر فرض حالا پشتیبانی بشه یا نه؟ چون تو بعضی سات ها خوندم که Win8 یه سیستم عامل شکست خورده در PC خواهد بود و به نظر خودم هم میتونه درست باشه چون تازه کم کم کاربران Windows دارن از WinXP به 7 کوچ میکنن هنوزم 27 درصد بازار سیستم عامل ها تو دست XP هست با این حساب حالا شما فکرشو بکن حالا تمام کاربران بخوان دوباره عادت نکرده به 7 به 8 کوچ کنن اونم با این همه تغییرات پایه ای و ساختاری که تو 8 بوجود اومده به نظر من مهم نیست اصلا تو 8 XNA ساپورت بشه نشه .NET باشه نباشه و ... حالا میخوام نظر شما رو بدونم.

عــــلی
02-06-2012, 19:54
بنام خدا.
سلام.
آخه کدوم پروژه ی مایکروسافت شکست خورده که این دومیش باشه؟
اون شرت به عنوان برترین شرکت نرم افزاری دنیاست.کی اومده همچین حرف خنده داری زده؟
شرکت های اپل و گوگل و مایکروسافت وقتی کاری انجام میدن قبلش کلی فکر و برنامه ریزی و کلی ... انجام میدن سپس تصمیم به انجامش میگیرن.
درمورد xna فکر کنم توی ویندوز 8 پشتیبانی میشه.
بنده خودم توی ویندوز 8 برنامه نویسی کردم.همچین زیاد هم متفاوت نیست.یه سری تغییرات انجام شده.که این خیلی طبیعیه.قطعاً برنامه نویی راحت تر از قبل شده.
موفق باشید.

M0hsen3D
02-06-2012, 22:12
سلام
Vista !!!!!!!!!! بزرگترین پروژه ای که مایکروسافت بدجور توش شکست خورد! من تعجب میکنم از این حرفتون! ولی اگه XNA تحت DX 11 و سازگار برای Win8 و Metro بیاد و همچنین VS 2011 که عالی میشه دیگه.
ولی من پیشنها میکنم یکم شما بیشتر روی شرکتی که از محصولاش استفاده میکنی تحقیق کنی و صرفا مصرف کننده نباشی.

موفق باشید

senaps
03-06-2012, 00:11
ببینید، الان باید بیشتر رفت سراغ ویژوال سی پلاس در کنار HTML5 و CSS3 .... با این سه تا میشه برا لباس شویی هم برنامه نویسی کرد.... چون ویندوز ۸، اخرین نسخه‌ای خواهد بود که این سیستم ها رو پشتیبانی میکنه....
خود برنامه نویس های ماکروسافت همه ریختن سر ویژوال سی پلاس...
مترو رو میشه با ویژوال سی پلاس و HTML نوشت و همچنین با سی شارپ...

M0hsen3D
03-06-2012, 00:27
درست ولی برنامه نویسی بازی سخت تر از اونی هست که با C++ و HTML , CSS یه App ساده بنویسید و XNA اومد اونو تو محیط منیج شده .NET پیاده کرد تحت فریم ورک تا کار خیلی ساده تر بشه و لذت بخش تر.
حالا دوباره بیاد بگه برنامه نویسی بازی فقط با C++ و DX زیاد خوشایند نیست و نمیشه اینجوری به تکنولوژی های مایکروسافت اعتماد کرد.

عــــلی
03-06-2012, 09:29
بنام خدا.
سلام.

سلام
Vista !!!!!!!!!! بزرگترین پروژه ای که مایکروسافت بدجور توش شکست خورد! من تعجب میکنم از این حرفتون! ولی اگه XNA تحت DX 11 و سازگار برای Win8 و Metro بیاد و همچنین VS 2011 که عالی میشه دیگه.
ولی من پیشنها میکنم یکم شما بیشتر روی شرکتی که از محصولاش استفاده میکنی تحقیق کنی و صرفا مصرف کننده نباشی.

موفق باشید
این نظر شخصی شماست که ویستا شکست خورده زیرا تا قبل از اینکه مایکروسافت ویندوز 7 رو بده بیرون اکثراً داشتن از ویستا استفاده میکردن.مثل ما ایرانیا نبود که هر نرم افزار کرک شده ای روش نصب کنن و تا اینکه روش اجرا نمیشد سیستم عامل رو زیر سوال میپبردند.


درست ولی برنامه نویسی بازی سخت تر از اونی هست که با C++ و HTML , CSS یه App ساده بنویسید و XNA اومد اونو تو محیط منیج شده .NET پیاده کرد تحت فریم ورک تا کار خیلی ساده تر بشه و لذت بخش تر.
حالا دوباره بیاد بگه برنامه نویسی بازی فقط با C++ و DX زیاد خوشایند نیست و نمیشه اینجوری به تکنولوژی های مایکروسافت اعتماد کرد.

دات نت فرمورک و کاربردها و تکنولوژی هاش هنوز موجود هستند دوست گرامی.
در نظر داشته باشید که اینجا تاپیک آموزش xan هست نه جای بحث.
یا مطالب رو توی تاپیک تکنولوژی های جدید ارسال کنید که توی امضا هست یا اینکه یه تاپیک مجزا بزنید که تاپیک سردرگم نشه.
موفق و سربلند باشید در پناه حق.

M0hsen3D
03-06-2012, 09:40
سلام دوست عزیز ,
نه دوست عزیز Vista یه پروژه ی شکست خورده بو و حرف من هم نیست حرف همه هست و آمار ها:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همونطور که میبینید تا قبل از امدن 7 نزدیک 70% از بازار OS ها در دست XP بود و بعد از آن به تدریج از XP کاسته و به 7 اضافه شده است
من واقعا تعجب میکنم از این موضوع شما اطلاع نداشتید! کاملا واضح هست که Vista یک پروژه شکست خورده برای MS بود و با دادن Win7 خواست این شکستشو جبران کنه.

ببینید من که تا الان ندیدم XNA برای VS2011 بیاد اونم تحت DX 11 اگه اومده ما رو هم با خبر کنید.

موفق باشید.

عــــلی
03-06-2012, 11:56
بنام خدا.
سلام.

سلام دوست عزیز ,
نه دوست عزیز Vista یه پروژه ی شکست خورده بو و حرف من هم نیست حرف همه هست و آمار ها:

همونطور که میبینید تا قبل از امدن 7 نزدیک 70% از بازار OS ها در دست XP بود و بعد از آن به تدریج از XP کاسته و به 7 اضافه شده است
من واقعا تعجب میکنم از این موضوع شما اطلاع نداشتید! کاملا واضح هست که Vista یک پروژه شکست خورده برای MS بود و با دادن Win7 خواست این شکستشو جبران کنه.

ببینید من که تا الان ندیدم XNA برای VS2011 بیاد اونم تحت DX 11 اگه اومده ما رو هم با خبر کنید.

موفق باشید.

این آمار داره کاملاً واضح میگه که طی دوسالی که ویستا اومد درصد استفادش همینطور بالا میرفت تا اینکه ویندوز 7 اومد.
شما دو سال 7 رو ببین فقط 10 درصد از ویستا بالاتر بوده که اونم به خاطر اینکه پروژه 7 خیلی بهتر و کارامد تر بوده.
ویندوز 7 طی 4 سال به این درصد رسیده ولی ویستا فقط دوسال بوده.
اگر بیشتر هم توی قسمت ویستا دقت کنید میبینید که درصد ویندوز XP پایین اومده و به ویستا اضافه شده.که به این شکست نمیگن.
البته من اصلاً حامی مایکروسافت نیستم.فقط چون زیاد از این حرفها میشنوم که شکست خورده فلان شده خواستم آگاه کنم.فکر کنم الان یه سالی میشه که تاپیک WPF رو زدم اما شاید فقط چند نفر رفته باشن سراغش بقیه هم مثل شما توی فکر شکست پروژه بودن.
بهتره بجای فکر کردن به این موضوعات مسیر و هدفتون رو برای پیشرفت هرچه سریعتر مشخص کنید.چون اون شرکت ها هر روز برای پیشرفت تکنولوژی های جدید میدند و اگه بخواید اینطوری اونارو زیر سوال ببرید یا روی کارای خودتون فکر کنید و... از بقیه عقب میمونید.
موفق باشید.

M0hsen3D
03-06-2012, 12:47
سلام ,
اگه مایکروسافت سر Vista شکست نخورد چرا 2 سال نشده 7 رو داد برای جمع کردن این خرابکاریشون؟ وقتی دنیا میگه MS تو Vista شکست خورد شما بیا بگو نخورده توهم نزنید!

اقا هدف تیم ما برفرض ساخت انجین با XNA (انجین که میدونید دیگه منظورم انجین بازی هست) امسال شروع کردیم سال دیگه مایکروسافت میگه اقا دیگه با XNA وداع کنید از این به بعد تو وین 8 فقط برنامه نویسی بازی = DX + C++0 (صفر رو برای هماهنگی متن زدم) خب حالا الان تکلیف تیم ما که 1 سال وقت و سرمایشو به پایه این تکنولوژی MS گذاشته و قرار هم هست که Discontinue بشه چی هست؟؟؟ دقیقا فرق شرکت های تجاری که سیاستشونو برای اهداف و منافعشون مدام عوض میکنن و کاربراشون کم ترین اهمیتی واسشون دارن با Open Source همینه ! Open Source ماله کسی نیست ماله همه هست منافع همه درش دخیل هست و همه چیز ازاد و رایگان!

والا اگه این تکنولوژی ها(WPF , XNA , ... ) تو 8 هم ساپورت بشه که همه خوشحال میشن! ولی واقعا همینطور میشه؟؟؟

عــــلی
03-06-2012, 13:15
سلام ,
اگه مایکروسافت سر Vista شکست نخورد چرا 2 سال نشده 7 رو داد برای جمع کردن این خرابکاریشون؟ وقتی دنیا میگه MS تو Vista شکست خورد شما بیا بگو نخورده توهم نزنید!
کدوم دنیا؟دنیای کسانی که دارن برای رقابت همدیگرو زمین میزنن؟
اگه بخواهیم مثل شما نتیجه گیری کنیم پس شرکت اپل و لینوکس با اون سیستم عاملشون سالهاست که شکست که هیچی ورشکست میشن.پس چرا هی دارن ورژن جدید میدن؟
پروژه 7 همون ویستا با کمی تغییرات عظیم هست.هومنطور که ویستا همون xp با تغییرات عظیم بود منتهی فقط این وسط 8 یه خورده فرقش زیاده که اگه بخش مترو رو برداریم بازم میشه همون ویندوز های قبلی با طرح و ورژن جدید.
به نظر شما دو سال کمه؟


سلام ,
اگه مایکروسافت سر Vista شکست نخورد چرا 2 سال نشده 7 رو داد برای جمع کردن این خرابکاریشون؟ وقتی دنیا میگه MS تو Vista شکست خورد شما بیا بگو نخورده توهم نزنید!
والا اگه این تکنولوژی ها(WPF , XNA , ... ) تو 8 هم ساپورت بشه که همه خوشحال میشن! ولی واقعا همینطور میشه؟؟؟
شما میتونید تحقیقاتتون رو بیشتر کنید.اگه ببینید مایکروسافت اینچیزیه که شما میگی پس همون بهتر برید برای سیستم عامل های دیگه یا برای دایرکت ایکس قدیمی برنامه نویی کنید.
من به شخصه یاد گرفتم فقط پیشرفت کنم و به این حرفا اهمیت ندم و واقعاً بعد از این همه پیشرفت وقتی میبینم ماکروسافت یه چیز جدید داده کلی لذت میبرم چون واقعاً برای من خسته کننده هست که هر روز با یه تکنولوژی کار کنم.
توی سیستم عامل 8 تکنولوژی WPF و xna وو و و ساپورت میشن.شما برای دسکتاپش برنامه بنویس اگه هم میخوای بازی های لمسی بسازی برای مترو بنویس.

M0hsen3D
03-06-2012, 14:10
Vista رو نسبت به XP میسنجن میگن شکست خورد. وگرنه اون مک از همون اول درصدش از 10-15 بیشتر نرفته واسش عادی هست. وقتی تا همین پارسال 50-60 درصد بازار در اختیار XP بود این یعنی شکست برای Vista چرا نمیخواید قبول کنید؟؟؟
اگه برای VS2011 تحت DX11 هم XNA بیاد یعنی ساپورت شده در Win8 وگرنه اینکه ما بیاییم VS2010 رو در 8 نصب کنیم بعد بیاییم تو مد دسکتاپش بازی بسازیم این نیست! یا اینکه تو 7 بسازیم تو مد دسکتاپ 8 اجرا کنیم دیگه برای XBOX بعدی و WP7 هم ساپورت نشه! این اسمش پشتیبانی XNA در Win8 نیست هر برنامه ای که Metro نباشه تو مد Desktop اجرا باید بشه.
هنوز معلوم نیست که پشتیبانی کنه یا نه ولی تا الان که هنوز مایکروسافت نه رد کرده نه قبول کرده.

اقا من نه از سیاست های مایکروسافت خوش میاد نه ردمیکنم ولی اینکه بیاد تکنولوژی بده بعد منسوخش کنه نه! یه ورژن دیگه بده یا با یه اسم دیگه که حله ولی فقط DX + C++0 (تا الان همینطوره) در 8 نه.

M0hsen3D
03-06-2012, 14:14
شما میتونید تحقیقاتتون رو بیشتر کنید.اگه ببینید مایکروسافت اینچیزیه که شما میگی پس همون بهتر برید برای سیستم عامل های دیگه یا برای دایرکت ایکس قدیمی برنامه نویی کنید.

اگه میخواستم با XNA و DX 9 برای 7 و پایینتر کار کنم مگه مشکی هست؟؟ مشکل اینه تو 8 خبری از DX برای .NET نیست!

_H2_
09-06-2012, 08:53
سلام
یاداوری میکنم که بیشتر تغییرات و تردیدهای Windows8 فقط محدود به سیستم جدید WinRT و Metro است واین در حالیست که نسخه های PC ویندوز فوق شامل محیط کلاسیک قبلی نیز هستند، در نتیجه همچنان همه برنامه های قدیم/جدید و با/بدون کپی رایت و دوبعدی/سه بعدی قابلیت تولید و نصب و اجرا در محیط کلاسیک را دارند و تمام حرف و حدیث و اگرهای موجود مربوط به نمایه Metro میشود.

درآخر هم به تاپیک زیر اشاره میکنم که موارد و مباحث مشابه بیشتر در انها بحث شده است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

emilvr
01-07-2012, 11:29
سلام، یه سونال داشتم، چطوری میشه توی xna از متن فارسی استفاده کرد؟ چون گویا به صورت پیشفرض ساورت نمیشه و پیغام خطا میده به این معنا که کاراکترهای فارسی براش تعریف نشد است

_H2_
02-07-2012, 21:44
سلام

چطوری میشه توی xna از متن فارسی استفاده کرد؟ چون گویا به صورت پیشفرض ساورت نمیشه و پیغام خطا میده به این معنا که کاراکترهای فارسی براش تعریف نشد است
XNA ذاتاً مشکل بنیادینی با فارسی ندارد، خطای شما صرفاً به دلیل عدم اضافه کردن مجموعه کاراکترهای فارسی در فایل XML مربوطه بوده. تنها مشکل XNA با فارسی مربوط به ناتوانی در چسباندن صحیح حروف به یکدیگر است که این را هم به روش های مختلف میتوان حل کرد.
یکی از روش ها با استفاده ساده در قالب یک dll پیاده سازی شده که در مطالب گذشته مفصل تر بحث شده. ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
موفق باشید.

behzad_khan
20-07-2012, 11:44
با سلام

یک سوال داشتم.

چطوری سرعت بازی در XNA را در کامپیوترهای مختلف کنترل کنم.

با تشکر

_H2_
23-07-2012, 22:04
سلام

چطوری سرعت بازی در XNA را در کامپیوترهای مختلف کنترل کنم
بطور پیشفرض نرخ فریم ها در XNA برابر 60فریم در ثانیه است که از تنظیم TargetElapsedTime به یک شستم ثانیه بدست امده.
یعنی با تغییر این عدد میتوان نرخ فریم را تغییر داد، ولی شاید بدلیل منابع سخت و نرم رایانه نرخ فریم با سرعت کمتری رخ دهد.

ولی معیار دقیقی که میتواند برای تنظیم زمان بندی در کلاس ها استفاده شود، تا مثلاً اگر کلاسی برای یک شی گرافیکی نوشته اید بتواند باهر نرخ فریمی زمان مناسبی را در حرکاتش لحاظ کند، همان تک مقداری است که به متد Update و Draw پاس داده میشود...
متغیر نوع Microsoft.Xna.Framework.GameTime شامل تمام اطلاعات لازم برای تنظیم و همزمان سازی اعمال با ریتم زمانی بین فریم ها است.

_H2_
22-01-2013, 15:38
سلام
دوستان علاقه مند، حتماً کم و بیش در جریان هستند که تولید XNA متوقف شده.
حالا شاید سوال مهم این باشد که جایگزین مناسب چیست؟


________________________________________


< MonoGame > ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])


پروزه متن بازی به نام MonoGame وجود دارد که کدنویسی و الگوی طراحی بسیار شبیه XNA دارد.
این شباهت به حدی است که در وبلاگ تیم برنامه XNA به افراد پیشنهاد شده برای ادامه کار از MonoGame استفاده نمایند.
ضمن اینکه این پروزه امکان تولید برنامه سه بعدی و یا بازی برای سایر سیستم عامل ها، مانند Mac, Linux, Android را هم ارائه میدهد.


________________________________________


< SharpDX > ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])


در واقع مبنای MonoGame بر SharpDX گذاشته شده.
SharpDX بسیار شبیه Managed DirectX و نازک ترین پوشش Managed روی DirectX است.
کدنویسی سخت تر و بیشتر شبیه ارتباط مستقیم با خود DirectX دارد.
گرچه نتایج این تحقیقات خیلی قابل اعتماد نیست ولی بحرحال در تحقیقات وبلاگ های برنامه نویسان خارجی آمده که این پلتفرم سه بعدی، بیشترین بازدهی سرعتی را بین سایر پلتفرم های دات نتی داشته.
توانایی MonoGame در اجرای روی سیستم عامل های مختلف هم به نوعی به ارث رسیده از توانایی SharpDX است.


________________________________________

گزینه ها و پلتفرم های دیگری هم وجود دارد ولی طبق تحقیقات و نظر شخصی ام دو مورد فوق شاخص تر هستند.
MonoGame به عنوان شبیه ترین گزینه به XNA
و
SharpDX به عنوان شبیه ترین گزینه به DirectX

البته لازم به یادآوری نیست که همه مباحث بحث شده در این تاپیک مختص برنامه نویسان است و افرادی که علاقه مند تولید سریع بازی های سه بعدی با برنامه نویسی کمتر و گاهاً بدون کدنویسی هستند میتوانند از برنامه های بازی سازی و موتورهای بازی استفاده کنند.

موفق باشید.

blossom111
15-03-2013, 23:31
سلااااااااااااام

لطفا آموزش ساخت یه بازیه کوچیک به زبانc++ باapiیdirectx روبذارید توی سایتتون
خیلی لازم دارم

لطفا بهم جواب بدید
کسی نیست کمکم کنه؟؟؟؟؟

hoseyn22
17-03-2013, 16:32
به نظر من نه تنها یک پروژه شکست خورده نبود بلکه یه عامل پیش برنده و راغب کننده مردم بود که ویندوز 7 رو خیلی با اشتیاق تر بپذیرند تمامی این کارها جزو مهندسی نرم افزاره و باید گفت که کلی هم سود آور بوده چون هم محصول قبلی فروش رفته و همه یه جورایی مجبور به کوچ به محصول بعدی بروند.:n16:

M-Gamer
15-06-2013, 23:39
از بس تاپیک شلوغ و پر نوشته بود گیج شدم! :n02:
من یه به یه بازی برخوردم که فایل های صوتی فشرده شده در آرشیوهای XNB را همراه داشت. می خواستم با چه برنامه ای می شه بازش کرد، فایلا رو دید و بهش چیزایی اضافه کرد و ... . دقیقا یه برنامه می خوام مثل Win rar که این کارا رو می کنه.

_H2_
20-06-2013, 21:47
سلام

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فایلهای منبع داده XNA معمولاً پسوند xnb داشتند.
این فایلها حاوی تصاویر، مدل های سه بعدی، فونت و... و... برنامه های XNA بودند.
من برنامه مشخص و واحدی برای باز کردن این فرمت نمیشناسم
ولی از دید برنامه نویسی کلاس های دی-سریالی (خواننده) این فایل ها در DLL های خود XNA یا پروژه موجود است.
خلاصه آنکه اگر برنامه نویسی بلد باشید، احتمالاً میتواند خط مشی هایی برای حل مشکلتان ارائه داد ولی اگر برنامه آماده بخواهید و همچنین با توجه به منسوخ شدن این پلت فرم، بعید است برنامه آماده ای پیدا کنید.
حالا کلاً یکی از این xnb هایتان را آپلود کنید، ببینیم همین خروجی XNA است؟! و اصلاً محتوی چه داده ای است؟!

M-Gamer
26-06-2013, 01:01
بله بفرمایید: [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این ها فایل های صوتی اند.
من از برنامه نویسی .net و #C و ++C سر در نمیارم اما ویژوال بیسیک رو در حد پایه ای بلدم.

_H2_
26-06-2013, 22:58
سلام
فایل هایتان را دیدم، صوت های عموماً بسیار کوتاه (حتی نیم ثانیه ای) مربوط به XNA هستند.



من از برنامه نویسی .net و #C و ++C سر در نمیارم اما ویژوال بیسیک رو در حد پایه ای بلدم

بنظر نمیرسد شما بتوانید خودتان کد مورد نظرتان را بنویسید و فقط برنامه مشکل شما را برطرف میکند...
من هم شخصاً فرصتی ندارم، که بخواهم یا بتوانم به شما یک برنامه نهایی تحویل دهم.
فرصت من فقط اجازه مشاوره برنامه نویسی برای شروع را میدهد، که چنین خواهد بود:

فایل های xnb توسط کلاس مرکزی ContentReader قابل خواندن هستند.
(که درواقع یک نوع BinaryReader است)

فایلهای xnb قابلیت فشرده سازی اطلاعات را هم دارند و خواندن مستقیم آنها با BinaryReader میتواند مشکل باشد.
کوتاه ترین راه خواندن xnb ها استفاده از تابع internal static Create در کلاس ContentReader است که بدلیل internal بودن باید با روش Reflection اجرا شود.

تابع ReadHeader از ContentReader که متاسفانه بازهم internal است، هدر xnb را میخواند و پس از یک بایت اشاره گر ساختار نوع (معمولاً هر فایل xnb فقط شامل یک نوع محتویات است و در نتیجه این عدد اغلب 1 خواهد بود) ، اطلاعات باینری اصلی xnb مستقیم در دسترس و قابل خواندن خواهد بود.

اگر xnb حاوی صوت باشد، فرمت پایه انتقالات wav. است.
درکل اصوات در xnb با فرمتی سفارشی زیر سریالی میشوند (جدای بحث فشرده سازی)


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پس از خواندن اطلاعات از ContentReader به قالب فوق باید اطلاعات برداشت شده را مجدد به قالب اصلی و استاندارد wav بازگرداند.

فرمت قالب اصلی فایلهای wav هم در صفحاتی مانند اینها قابل مشاهده است:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

خلاصه:
1)
متاسفم، همانطور که گفتم فرصت من فقط درحد دادن سرنخ های اولیه است.

2)
اگر واقعاً نیازمند باز تبدیل xnb به wav هستید، باید از یک برنامه نویس بخواهید برایتان انجامش دهد.

3)
اگر بیخیال xnb های قبلی و ویرایش آنها شوید، کارتان ساده خواهد شد!
در واقع هرچقدر تبدیل xnb به wav کمی مشکل باشد، ولی تبدیل wav به xnb ساده است.
منظورم آن است که اگر wav های خودتان را داشته باشید و یا از اول بسازید، مشکلتان حل میشود.
کافیست VS+XNA را نصب کنید. برنامه اش موجود است و نیاز به برنامه نویسی هم ندارید، با کمی تلاش به راحتی wav های جدیدتان را به xnb تبدیل خواهید کرد و جایگزین فایل های قبلی خواهید کرد.

موفق باشید.

mohmad1363`
03-09-2013, 18:42
ببخشید می شه راهنمایی کنید که خود این نرمافزار را چطور می شه به vb.nt 2010 اضافه کرد باتشکر:n06::n06::n06:

_H2_
04-09-2013, 20:17
سلام


ببخشید می شه راهنمایی کنید که خود این نرمافزار را چطور می شه به vb.nt 2010 اضافه کرد باتشکر

به پست 68 مراجعه کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

CRAZY036
21-12-2013, 00:35
salam in ke linkesh vejood nadareh lotf konid ye negah bendazid

_H2_
29-12-2013, 02:37
سلام

salam in ke linkesh vejood nadareh lotf konid ye negah bendazid
درصورت امکان لطفاً فارسی تایپ کنید...
دقیقاً منظورتان کدام لینک است؟
لینک دانلود XNA4 و لینک دانلود سمپل تاپیک را آزمایش کردم و مشکلی ندیدم.
البته مجدد باید یادآوری کنم که تولید XNA متوقف شده و نسخه جدیدی نخواهد داشت و همانطور که در پست 88 تشریح کردم دوستان میتوانند از گزینه های دیگر مانند monogame,sharpdx,unity3d و... استفاده کنند.

CRAZY036
06-04-2014, 19:43
سلام پروژه کار با کامپوننت رو اگه میشه برام ایمیل کنید لینکش خرابه
alone.helas@gmail.com

_H2_
06-04-2014, 21:07
سلام

...پروژه کار با کامپوننت رو اگه میشه برام ایمیل کنید لینکش خرابه...
اگر منظورتان لینک پروژه نمونه این تاپیک است، بظاهر هر دو لینک فعال هستند.
لطفاً مجدد بررسی نمائید.
روی لینک ها راست کلیک کرده و گزینه Save target as را بزنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
موفق باشید.