2D Game Programming with XNA Framework

XNA Framework یکی از محصولات مایکروسافته مخصوص ساخت بازی کامپیوتری توی محیط .NET
خیلی سریع اصول طراحی یک بازی دوبعدیو میگم. بقیه ش با خودتون. یک پروژه از نوع Windows Game ساختم و اسمشو گذاشتم MyGame. توی پروژه ی MyGame از همون اول، بجای Class1 که همیشه خود بخود ساخته میشه، یه کلاس دارید به اسم Game1 که توی اون 5 تا تابع وجود داره:
1.         Initialize()
هر چیزی که اول بازی باید مقدار دهی بشه اینجا قرار میگیره. البته بجز اجزای گرافیکی صفحه مثل Texture ها و Sprite ها.
مثلا:
this.IsMouseVisible = true;
map = new Map(128, 128, Difficulty.Easy);

2.         LoadContent()
حالا باید Texture دوبعدی تعریف کنید. فایل عکسی که برای Texture استفاده میکنید ترجیحا PNG باشه که زمینه اش Transparent باشه. (مثلا فایل image001.png)  توی Solution Explorer این عکسو به MyGameContent اضافه کنید و بعد توی LoadContent اونو توی بازی Load کنید.
مثلا:
//In the Game1 Class Body
private Texture2D playerTexture;
private
SpriteFont font1;
//Inside LoadContent
playerTexture = this.Content.Load<Texture2D>("image001");
font1 = Content.Load<SpriteFont>("SpriteFont1");

3.         UnloadContent()
اگر تعداد Content های بازی (عکس، موزیک، فونت، افکت...) زیاد باشه و با عوض شدن مرحله بخواهید اونا رو Unload کنید از این تابع استفاده کنید. یه چیزی شبیه به Dispose هستش.

4.         Update(GameTime gameTime)
5.         Draw(GameTime gameTime)

تمام منطق برنامه در تابع Update مدیریت میشه. از قبیل تشخیص Collision یا کلیدهایی که فشار داده شده اند یا Health بازیکن... تابع Update و Draw به نوبت اجرا میشن. توی Update مختصات Texture ها و اندازه و Tintشون تعیین میشه و توی Draw تمام Textureهایی که باید نمایش داده بشن نمایش داده میشن. نشون دادن متن یا پخش آهنگ هم در Draw انجام میشه. البته میشه که همه ی منطق برنامه رو توی Draw نوشت ولی باید توجه داشت که این دو تابع هر کدوم واسه کاربرد خودشون طراحی و بهینه سازی شدن و اگه منطق و گرافیک درست تفکیک نشن ممکنه Performance برنامه بیاد پایین.
//Update
if (Keyboard.GetState(PlayerIndex.One).IsKeyDown(Keys.Space))
    Player.State = PlayerState.Jump;

//Draw
GraphicsDevice.Clear(Color.CornflowerBlue); //if you remove this line, screen won’t refresh
spriteBatch.Begin();//like From1.SuspendLayout in WindowsFromApplication
spriteBatch.DrawString(font1, "Press space to jump!", new Vector2(10,10), Color.DarkRed);
spriteBatch.Draw(playerTexture, new Vector2(200,200), Color.White); //White means: no tint
spriteBatch.End();//like From1.ResumeLayout in WindowsFromApplication








لینک دانلود XNA SDK برای .NET Framework 3.1
لینک دانلود XNA SDK برای .NET Framework 4

No comments:

Post a Comment