اموزش ساخت بازی به وسیله MonoGame
یا سلام به خدمت اعضای محترم انجمن ارواح :n02:
می دونم دیگه اینجا پرنده هم پر نمیزنه ولی گفتیم جهت شادی اموات هم شده این رو بزاریم :n02:
کلا یه توضیح در باره این بدم که MonoGame یکی از پسرعمو های xna که با شدتی بسیار خفن تر جدیدا خیلی طرفدار پیدا کرده . یعنی همه چیزش به کنار اینکه می شه روی اندروید و اویا و ios هم خروجی گرفت به کنار :n02: روندش مثل xna ولی صد البته خوبی نسبت به اون اینه که ساده تر هم هست .
در مورد این چیزی که دارم میزارم توی سایت یه سری اموزشه که ابتدای به امر توی سایت udk.ir شروع کردم و اگه یادم بمونه هر وقت ادامه اش رو می نویسم اینجا رو هم اپدیت می کنم .
اگه سوالی بود همینجا بپرسین بلد باشم جواب می دم
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
بخش اول :
نصب MonoGame :
جهت استفاده کردن از این فریم ورک برای ساخت بازی های رایانه ای مولتی پلتفرم تا کنون دو محیط کار معرفی شده :
1- Visual Studio
2- Xarmin Soft
که به طبع انتخاب میان هر کدام از انها به نظر و شیوه کار برنامه نویس بستگی دارد . اما از نقطه نظر کار این دو محیط تقریبا شبیه به هم هستند توجه کنید شیوه کار در این فریم ورک کد نویسی است و این دو نرم افزار هر دو محیط کد نویسی می باشند .
جهت دسترسی به IDE زیبای Xarmin Soft می توانید به آدرس :
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای شروع به کار ابتدا باید تعدادی Add-in را به سیستم عامل اضافه کنیم !!
ابتدا Gtk# را از طریق ادرس زیر دریافت کنید :
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یا :
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همانطور که پیش از این نیز گفته شده محیطی که ما برای کار انتخاب می کنیم بر اساس انتخاب خودمان است . در اینجا ما با ویژوال استدیو بازی های خود را خواهیم ساخت .
برای استفاده از MonoGame در محیط ویژوال استدیو باید Add-In ان را از طریق آدرس زیر دریافت کنید :
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
پس از دریافت ان را نصب کنید !
همچنین باید اخرین نسخه از میان افزار OpenAl را نیز پیش از اجرای فریم ورک در سیستم نصب کرده باشید
پس از انجام تمامی این قسمت ها اکنون می توانید ویژوال استدیو را اجرا کنید :
می توانید در قسمت New Project ویژوال استدیو مشاهده کنید که قسمت جدیدی با نام MonoGame به آن اضافه شده است
همانطور که در تصویر نیز می بینید انواع پلتفرم های موجود و قابل دسترسی در لیست زیر قرار دارند که شما می توانید بازی خود را بر اساس آنها ایجاد کنید
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
قسمت دوم
بخش 2 :
ایجاد اولین پروژه MonoGame :
در بخش 1 توانستیم موارد لازم برای استفاده و ورد به محیط این فریم ورک را ایجاد کنیم . همانطور که در قبل هم به ان اشاره شد محیط کاربری ما Visual Studio 2010 می باشد که با استفاده از نصب نرم افزار های مورد نیاز بخش توانستیم MonoGame را بر روی ان نصب کنیم . اکنون و در ادامه کار اولین پروژه خود را ایجاد خواهیم کرد :
توجه به این نکته هم بسیار ضروری است که بر روی سیستم شما باید حداقل یک درایور حاوی اخرین نسخه Open Gl وجود داشته باشد درصورت عدم نصب آن در محیط کد نویسی با ارور عدم توانایی در یافتن opengl.dll روبه رو خواهید شد
برای ایجاد یک پروژه جدید مطابق MonoGame :
1-با استفاده از کلید های Ctrl + shift + n یک پروزه جدید ایجاد کنید
2-سپس از منوی سمت چپ بر روی MonoGame کلیک کرده پس از آن در ListItem وسط صفحه بر روی MonoGame Windows OpenGl Project کلیک کنید .
پس از آن نام GameTest1 را برای نام ان وارد کرده و در انتها کلیک OK را برای ساخت فشار دهید.
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اکنون به اصطلاح پی بازی ما اماده است !!!
برای شروع خروجی ابتدایی بازی را با هم مشاهده می کنیم :
برای این کار در محیط VisualStudio دکمه میانبر F5 را فشار دهید
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای شروع کار مقداری را به صورت ازمایشی اضافه کرده تا عملکرد را مشاهده کنیم .
بر روی کلاس GameTest1 در سمت راست دوبار کلیک کرده تا وارد محیط کد نویسی آن شوید
اکنون در داخل این خط :
[PHP] public Game1()
: base()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
[/PHP]
تکه کد زیر را اضافه کنید :
[PHP] graphics.IsFullScreen = true; [/PHP]
سپس بار دیگر با زدن کلیک F5 محیط را اجرا کنید .
می توانید مشاهده کنید با همین تکه خط کد توانستیم قابلیت Full Screen شدن را در سکانس باز انجام دهیم .
تبریک می گوییم شما توانستید اولین پروژه خود در محیط MonoGame را انجام دهید !!!!!!
قسمت سوم :
بخش سوم :
چگونه در MonoGame کد نویسی کنیم ؟؟!!
در بخش های گذشته توانستیم مقدمات کار با فریم ورک فوق را فرا گرفته و از اولین پروژه خود Run بگیریم .
در صورتی که در ویژوال استدیو بر روی کلاس Game در Solution Explorer دوبار کلیک کنیم خواهیم دید که بلاک کد نویسی آن اجرا خواهد شد !!
در بلاک رویداد های آن با کدهای فوق روبه رو خواهیم شد :
[PHP]#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
using Microsoft.Xna.Framework.GamerServices;
#endregion
namespace Figure2
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class Game1 : Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
public Game1()
: base()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
/// <summary>
/// Allows the game to perform any initialization it needs to before starting to run.
/// This is where it can query for any required services and load any non-graphic
/// related content. Calling base.Initialize will enumerate through any components
/// and initialize them as well.
/// </summary>
protected override void Initialize()
{
// TODO: Add your initialization logic here
base.Initialize();
}
/// <summary>
/// LoadContent will be called once per game and is the place to load
/// all of your content.
/// </summary>
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here
}
/// <summary>
/// UnloadContent will be called once per game and is the place to unload
/// all content.
/// </summary>
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}
/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
// TODO: Add your update logic here
base.Update(gameTime);
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
base.Draw(gameTime);
}
}
} [/PHP]
به واقع عملکرد این رویدادها چیست ؟؟
چگونه می توانیم از آن ها استفاده کنیم؟؟؟
اکنون و در ادامه هر یک از آن ها را بررسی خواهیم کرد :
در پروژه ما دو قسمت جهت کد نویسی وجود دارد
ابتدا کلاس Program.cs
و سپس کلاس Game1.cs
کلاس ابتدایی که همان کلاس اصلی در زبان برنامه نویسی c# بوده نگه دارنده مقادیر ابتدایی و اجرای بازی است . می توان آن را نقطه ابتدایی و اجرایی پروژه نیز نامید .همچنین این فایل تعیین کننده اجرای بازی ما نیز خواهد بود . البته این امر بسیار معدود پیش خواهد امد که ما بخواهیم کلاس اصلی را تغییر دهیم . اغلب فعالیت ما در حیطه کلاس Game1.cs خواهد بود
کلاس دومی که با نام Game1.cs تشکیل شده است در برگیرنده تمامی اعمال ما در حین اجرای پروژه می باشد .
نکته : لزومی به همین نام بودن این کلاس نیست و می توان آن را در حین پروژه تعویض نام نیز داد !
اکنون بررسی کدها را اغاز خواهیم کرد :
جهت برنامه نویسی در یک زبان باید لیستی از statement ها آن را نیز فراخوانی کرد همانند اینکه در c++ با استفاده از include# فایل هدر را می توان فراخوانی کرد در اینجا نیز با استفاده از using این امر امکان پذیر خواهد شد . جهت کار در محیط MonoGame تعدادی فایل هدر به همراه فریم ورک مربوطه ارائه شده که از طریق تعریف Statment به انها دسترسی پیدا خواهیم کرد
[PHP]
#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
using Microsoft.Xna.Framework.GamerServices;
#endregion [/PHP]
همانطور که می توان مشاهده کرد به خاطر Extend بودن MonoGame از MicrosoftXna در اینجا هدر های فریم ورک Xna را می توان مشاهده کرد
در ادامه بررسی کدها به قطعه زیر برخواهیم خورد :
[PHP]public class Game1 : Game{[/PHP]
همانطور که می توان مشاهده کرد شروع کلاس Game1 در اینجا تعریف شده است. می توان مشاهده کرد که کلاس فوق از کلاس Game ارث بری شده است
در اداه به قسمت زیر می رسیم :
[PHP]GraphicsDeviceManager graphics;SpriteBatch spriteBatch;[/PHP]
در ادامه استفاده از هردو را خواهیم اموخت .
اولین متغییر جهت دسترسی به منابع کارت گرافیک
و بعد جهت کار با اسپرایت استفاده خواهد شد (در ادامه این بخش نیز بررسی خواهد شد)
در خط بعد به کد زیر خواهیم رسید :
[PHP]
public Game1 ()
{
graphics = new GraphicsDeviceManager (this);
Content.RootDirectory = "Content";
graphics.IsFullScreen = false;
} [/PHP]
در این قسمت می توان مشاهده کرد که مقادیر GraphicsDeviceManager و مدیریت Content ها برای کار در حین پروژه در سازنده کلاس مقداردهی شده اند
(این قسمت ها در بخش های اینده بررسی خواهند شد)
* البته کد فوق : graphics.IsFullScreen = false; از ابتدا وجود نداشته و ما از بخش قبل به آن اضافه کرده ایم
متدها :
متد اولیه!! :
در خط بعد می توان کد زیر را مشاهده کرد :
[PHP]
protected override void Initialize ()
{
// TODO: Add your initialization logic here
base.Initialize ();
}
[/PHP]
این متد دقیقا پس از سازنده اجرا خواهد شد . می توان این متد را اولین متد اجرایی برنامه نیز در نظر گرفت برای همین هنگامی که پروژه اجرا می شود این کد نیز همراه آن اجرا خواهد شد برای همین تمامی اعمالی که نیاز است در ابتدای بازی اجرا شوند در این متد قرار خواهند گرفت
متد بعدی مربوط به مدیریت و اجرا Content ها می باشد :
[PHP]
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here
} [/PHP]
همانطور که می توان مشاهده کرد تابع SpriteBatch در اینجا مقدار دهی شده است
این تابع جهت فراخوانی content ها (چه سه بعدی و چه دو بعدی - چه تکسچر ها و غیره ... ) برای بازی به کار می رود و می تواند به هر صورت و در هر زمانی Content های مورد نیاز را فراخوانی کند
همانطور که می توان مشاهده کرد این متد Override شده است برای همین این قابلیت در آن وجود دارد که دسترسی برنامه نویس را برای وارد کردن Content ها کاملا باز بگذارد !!
همچنین در خط بعد متد :
[PHP] protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
} [/PHP]
نیز جهت خارج کرد Content های Load شده در اختیار برنامه نویسی می باشد!!
در ادامه با متد زیر مواجه خواهیم شد :
[PHP] protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
// TODO: Add your update logic here
base.Update(gameTime);
} [/PHP]
هنگامی که پروژه شما اجرا خواهد شد به ساختار نیاز است که اعمال را در حین اجرا بازی انجام دهد . وظیفه این متد در اینجا این است که کنترل تمامی اعمال اجرای بازی را بر عهده بگیرد (کنترل ورودی های کاربر - پخش صدا - تشخیص برخورد و غیره ....)
به صورت پیش فرض این قسمت هر 30 ثانیه یک بار در حین بازی اجرا می شود که در ادامه خواهیم دید که چگونه می توانیم به همین اجرا نیز دسترسی داشته باشیم .
حتی اگر کاربر متد های دیگری نیز برای اجرا عملکرد های اجرایی نیز تعریف کند تمامی ان ها باید از طریق متد فوق صدا زده شوند!!
در انتها با متد زیر رو به رو خواهیم شد :
[PHP]
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
base.Draw(gameTime);
}
[/PHP]
همانند متد Update این متد نیز به صورت پیش فرض هر 30 ثانیه یک بار اجرا میشود .
در حال حاظر ما کاری به این متد نخواهیم داشت (در بخش های بعد دلایل آن بررسی خواهد شد)
در این بخش ساختار کلی کد نویسی و عملکرد هر کدام از متد ها مورد بررسی قرار گرفت . اکنون می دانیم که هر کدام از متد ها چه کاری را انجام می دهند و باید چگونه کد نوسی را در پروژه خودمان انجام دهیم . در بخش های اینده به بررسی بیشتر اجزای این فریم ورک خواهیم پرداخت
پایان بخش 3
قسمت 4 ام از سه شنبه به بعد میشینم می نویسم
در ضمن یه مسئله احتمالا ادیتور برنامه نویسی رو از ویژوال استدیو به xarmin studio تغییر میدم حالا سه شنبه میام توضیح می دم چرا
فعلا با تشکر:n02: