آموزش های جدید Xna + آموزش های تصویری
سلام دوستان:11:.
تاپیکمون یکم خاک گرفته بود گفتم یه گردگیری کنم:10:.
آموزش های این پست همه انگلیسی هستند.
دوتا کتاب آموزش Xna به انگلیسی:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دانلود:
کد:
http://mediafire.com/?4129b0fqgef49i1
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دانلود:
کد:
http://mediafire.com/?vb7fus3ml1h595u
آموزش های تصویری XNA Game Studio:
1.معرفی:
کد:
http://snip.ms/dwxna01
2.ایجاد پروژه ها لینک کردن XNA و XSI:
کد:
http://snip.ms/dwxna02
3.ایجاد یک مدل ساده:
کد:
http://snip.ms/dwxna03
4.نمایش مدل ساده در XNA:
کد:
http://snip.ms/dwxna04
5.تکسچر برای XNA:
کد:
http://snip.ms/dwxna05
6.کار با Bridge (ساخت مدل برای قسمت 6)
کد:
http://snip.ms/dwxna06b
6.2.آموزش Rigging, Weighting, and Animating:
کد:
http://snip.ms/dwxna06
7.ساخت بازی:
کد:
http://snip.ms/dwxna07
8.ساخت آهنگ:
کد:
http://snip.ms/dwxna08
9.صدا در XNA با استفاده از XACT:
کد:
http://snip.ms/dwxna09
Gathering Input from Guitar Controller.10:
کد:
http://snip.ms/dwxna10
Programming Input / Final Code Walkthrough.11:
کد:
http://snip.ms/dwxna11
12.برنامه نویسی برای XBox 360:
کد:
http://snip.ms/dwxna12
یه سری آموزش در مورد XNA دارم دانلود میکنم که حدود 2 گیگ میشه.
تموم که شد براتون آپلود میکنم:46:.
دوستان در صورت فیلتر بودن لینک های مدیا فایر یک cdn به اول سایت اضافه کنید.
مثلاً:
کد:
http://cdn.mediafire.com/?4129b0fqgef49i1
التماس دعا.
موفق باشید.
زمین و عوارض (پستی و بلندی) آن
سلام
میلاد حضرت مهدی (ع) را خدمت دوستان تبریک عرض میکنم.
می باید در این پست در مورد ادامه "کنترل دوربین" صحبت میکردم (البته خیلی هم بیربط نیست) ولی دوستی چند روز قبل سوالی پرسید که با توجه به تعطیلی موجود تصمیم گرفتم بجای یک پاسخ کوتاه،مطلب کامل تری در غالب یک پست تهیه و بصورت عمومی ارائه دهم.
==============
شاید لزومی به گفتن نداشته باشد که کارت گرافیک و 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 قرار دارد باعث میشود دوربین (یا همان کاراکتر ما) روی زمین جاری بماند و در دیوار هم فرو نرود.
بنظرم بقیه کد واضح است و توضیح خاصی نمیخواهد.
http://support.h02.ir/fwlink/?LinkId=1005808167
موفق باشید.
سرعت و بازدهی کد در ایجاد کلاس ها
بنام خدا..
سلام دوستان خسته نباشید...:10:.
یه مبحثی رو من بعد چند وقت تجربه برنامه نویسی متوجه شدم...چون خیلی وقت پیش(یعنی حدود 6 ماه) دیزاین پترن ها رو خونده بودم الان یادم نمیاد که این بحثی که میخوام بگم رو توی دیزاین پترن ها توضیح داده اند یا خیر...
من میگم اگه که گفتن چه خوب اگه هم که نگفتن چه بهتر....:31:
نمیدونم اسمشو چی بذارم ولی شما از تیتر موضوع باید همه چیز رو متوجه شده باشید.
خوب من یک کد به شما میدم و شما اون رو تست میکنید ان شاءالله و متوجه بحث سرعت و بازدهی خواهید شد به امید خدا.
خوب به کلاس های زیر نگاه کنید:
برای مثال کلاس زیر کلاسی است که شما عملیات پیچیده ی خود را در آن انجام میدهید:
کد:
public static class MathH
{
public static int GetExecute()
{
double Q = int.MaxValue;
for (int i = 0; i < 100000; i++)
{
Q = Math.Cosh(Q);
}
return (int)Q;
}
}
و این هم کلاس معمولی شماست که برای نمایش یا استفاده آن را به در برنامه خود بکار میبرید:
کد:
public class Person
{
string _Name;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
object _Value = MathH.GetExecute();
public object Value
{
get
{
return _Value;
}
set { _Value = value; }
}
}
شاید در نگاه اول خیلی ساده و به چشم بیاید......:20:.
اما حالا کد را تست کنید:
کد:
List<Person> lstPersons = new List<Person>();
for (int i = 0; i < 10000; i++)
{
lstPersons.Add(new Person());
}
چقدر زمان برد تا فقط 1000 کلاس در حافظه ی سیستم شما قرار بگیرد؟
یک نگاه دیگر به کدها بیاندازید اگر متوجه اشتباه در سیستم کلاس نویسی بالا دیده اید آنرا درست کنید وگرنه ادامه را بخوانید....
روشی که مارا دچار مشکل کرده است مقدار دهی اولیه کدهایمان است....
به پروپرتی زیر دقت کنید:
کد:
object _Value = MathH.GetExecute();
public object Value
{
get
{
return _Value;
}
set { _Value = value; }
}
همیشه یادمان باشد تا زمانی که از پروپرتی خاصی در کلاسمان استفاده نمیکنیم آنرا بلافاصله مقدار دهی نکنیم...
کد بالا را در کلاس Person پیدا کنید و آنرا اینگونه تغییر دهید:
کد:
object _Value = null;
public object Value
{
get
{
if (_Value == null)
_Value = MathH.GetExecute();
return _Value;
}
set { _Value = value; }
}
حال با همان کد اجرایی که قبلاً داده بودم برنامه را تست کنید:
کد:
List<Person> lstPersons = new List<Person>();
for (int i = 0; i < 10000; i++)
{
lstPersons.Add(new Person());
}
آیا تغییری در سرعت دیده اید؟:46:.
موفق و سربلند باشید در پناه حق.