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





صفحه اول انجمنها -> ساخت بازی با فریم ورک XNA -> شروع با XNA ( قسمت اول )
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي
برو به صفحه 1, 2  بعدي

شروع با XNA ( قسمت اول )
نويسنده
پيغام
مهدي بازيان
مدیر انجمن
مدیر انجمن


تاريخ عضويت: 1 شنبه 5 تير 1384
تعداد ارسالها: 430
محل سكونت: اصفهان


4 شنبه 13 بهمن 1389 - 23:05
پاسخ بصورت نقل قول
سلام

می خوام یه سری مقاله با عنوان "شروع با XNA " بنویسم. این اولین مقاله از این سریه.

البته پیشنهاد من اینه که زبان انگلیسیتون در هر سطحی که هست با MSDN جلو برید : http://msdn.microsoft.com/en-us/library/bb200104.aspx

این مقاله بر اساس یکی از مقاله های MSDN به نام Your First Game نوشته شده . ( http://msdn.microsoft.com/en-us/library/bb203893.aspx#Y1399 )
****************************

خوب برای شروع شما نیاز به داشتن XNA 4.0 دارید.
که می تونید از اینجا دانلود کنید : http://go.microsoft.com/fwlink/?LinkID=189554


از منوی Start روی All Programs کلیک کنید . وارد پوشه XNA Game Studio 4.0 بشید و از اونجا XNA رو اجرا کنید.

از منوی File روی New Project کلیک کنید.
از پنجره باز شده در قسمت Visual C# روی XNA Game Studio 4.0 کلیک کنید.
حالا Windows Game رو انتخاب کنید. در قسمت Name هم اسم بازیتون رو بنویسید ، مثلا : MyFirstGame
در قسمت Location هم می تونید آدرسی که قصد دارید پروژتون اونجا ذخیره شه رو تایپ کنید.
بعد از این روی دکمه OK کلیک کنید.

از قسمت Solution Explorer که سمت راست صفحه است ، روی Game1.cs کلیک کنید. ( اگه این قسمت Solution Explorer رو در صفحه نمی بینید ، روی منوی View کلیک کنید و Solution Explorer رو انتخاب کنید. )



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

    * The Initialize method is where you can initialize any assets that do not require a GraphicsDevice to be initialized.
    * The LoadContent method is where you load any necessary game assets such as models and textures.
    * The UnloadContent method is where any game assets can be released. Generally, no extra code is required here, as assets will be released automatically when they are no longer needed.
    * The Update loop is the best place to update your game logic: move objects around, take player input, decide the outcome of collisions between objects, and so on.
    * The Draw loop is the best place to render all of your objects and backgrounds on the screen.



در قسمت Initialize شما می تونید مقدار اولیه متغیر ها رو مشخص کنید . البته متغیرهایی که وابسته به GraphicDevice نباشند .
در LoadContent شما منابع مورد استفاده در بازیتون رو Load می کنید. مثلا مدلها و تکسچر ها.
در UnloadContent هم که منابعی دیگه نیازی ندارید رو Unload میکنید.
حلقه Update بهترین جا برای بروز رسانی متغیرهاست. حرکت دادن اشیاء ، بررسی ورودی ها و یا بررسی برخورد ها.
حلقه Draw هم جایی هست که شما همه اشیاء و بکگراند ها رو رندر می کنید.


از قسمت Solution Explorer در سمت راست روی MyFirstGameContent راست کلیک کنید و از قسمت Add گزینه Existing Item ... رو انتخاب کنید. حالا یک Sprite که قبلا مثلا با Paint طراحی کردید رو انتخاب کنید.
به عنوان مثال من این اسپرایت رو که با Paint طراحی و تو Desktop ذخیره کرده بودم رو انتخاب کردم.



حالا روی Game1.cs کلیک کنید و متد LoadContent رو پیدا کنید و کدهای زیر رو اضافه کنید .
كد:

// This is a texture we can render.
Texture2D myTexture;

// Set the coordinates to draw the sprite at.
Vector2 spritePosition = new Vector2(200,300);

protected override void LoadContent()
{
    // Create a new SpriteBatch, which can be used to draw textures.
    spriteBatch = new SpriteBatch(GraphicsDevice);
    myTexture = Content.Load<Texture2D>("mytexture");
}


توضیحات درباره با کدهای اضافه شده :
ما توی خط زیر یه متغیر به به نام myTexture از نوع Texture2D تعریف کردیم.
كد:
Texture2D myTexture;


اینجا هم متغیری به نام spritePosition از نوع Vector2 تعریف کردیم و مقدار اون رو X = 200 و Y = 100 قرار دادیم. ( مختصاتی که می خواهیم اسپرات در اون رسم شه رو در این متغیر قرار میدیم )
كد:

Vector2 spritePosition = new Vector2(200,100);


SpriteBatch هم بعدا برای رسم اسپرایت استفاده میشه :

كد:
spriteBatch = new SpriteBatch(GraphicsDevice);


در این خط هم اسپرایتی که در Content قبلا Add کرده بودیم رو در myTexture قرار میدیم. ( اینجا اسم فایل اسپرایت من CH هست )
كد:

myTexture = Content.Load<Texture2D>("CH");


حالا متد Draw رو پیدا کنید.

کدهای زیر رو اضافه کنید :
كد:


protected override void Draw(GameTime gameTime)
{
    graphics.GraphicsDevice.Clear(Color.White);

    // Draw the sprite.
    spriteBatch.Begin();
    spriteBatch.Draw(myTexture, spritePosition, Color.White);
    spriteBatch.End();

    base.Draw(gameTime);
}


در این قسمت کدهای مربوط به پاک کردن صفحه و رندر اسپرایت قرار گرفتند.

این خط صفحه رو با رنگ CornflowerBlue پاک می کنه ( مثلا با با نوشتن White صفحه به رنگ سفید پاک میشه ) :
كد:
    graphics.GraphicsDevice.Clear(Color.CornflowerBlue);


خط زیر هم myTexture رو در مختصات spritePosition و با رنگ سفید رسم می کنه. ( منظور از رنگ سفید رو خودتون با انتخاب رنگهای دیگه متوجه میشید. )

كد:
    spriteBatch.Draw(myTexture, spritePosition, Color.White);


تابع Begin و End هم به ترتیب باید قبل و بعد از کدهای مربوط به رندر بنویسید.
یعنی مثلا اگه ما دو تا اسپرایت داشتیم ، این طوری باید می نوشتیم :
كد:


    spriteBatch.Begin();
    spriteBatch.Draw(myTexture, spritePosition, Color.White);
    spriteBatch.Draw(myTexture2, spritePosition, Color.White);
    spriteBatch.End();



خوب اگه الان پروژه رو Build کنید و اجرا کنید باید اسپرایت شما در مختصات 200,100 رسم بشه .

چیزی شبیه به این :



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

متد Update رو پیدا کنید.

کدهای زیر رو اضافه کنید.
كد:

protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // TODO: Add your update logic here

            KeyboardState k = Keyboard.GetState();

            if (k.IsKeyDown(Keys.Left))
                spritePosition.X -= 2;
            if (k.IsKeyDown(Keys.Right))
                spritePosition.X += 2;
            if (k.IsKeyDown(Keys.Up))
                spritePosition.Y -= 2;
            if (k.IsKeyDown(Keys.Down))
                spritePosition.Y += 2;


         

            base.Update(gameTime);
        }


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

كد:
   KeyboardState k = Keyboard.GetState();


تابع isKeyDown هم چک می کنه که دکمه مورد نظر فشرده شده یا نه .

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

حالا F5 رو بزنید و نتیجه رو ببینید .

شما می تونید سورس این بازی رو از اینجا دانلود کنید :http://dl.dropbox.com/u/19812944/myFirstGame.zip
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر
 

نويسنده
پيغام
SBS
در حال رشد
در حال رشد


تاريخ عضويت: جمعه 24 ارديبهشت 1389
تعداد ارسالها: 53
محل سكونت: یاسوج


5 شنبه 14 بهمن 1389 - 12:54
پاسخ بصورت نقل قول
عالی بود!!!فقط ای کاش PDF بود
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
morad
کاربر اخراج شده


تاريخ عضويت: شنبه 6 آذر 1389
تعداد ارسالها: 41
محل سكونت: بلندر و سی پلاس پلاس


5 شنبه 21 بهمن 1389 - 02:22
پاسخ بصورت نقل قول
من از ايكس ان اي رفتم تو سي پلاس پلاس خداحافظ
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر
 

نويسنده
پيغام
Ali
مدیر کل
مدیر کل


تاريخ عضويت: شنبه 20 تير 1383
تعداد ارسالها: 2983
محل سكونت: On the edge


5 شنبه 21 بهمن 1389 - 12:41
پاسخ بصورت نقل قول
مرسی مهدی جان بابت مقاله. خسته نباشی.

_________________
پی سی گیمرز - آرشيو بزرگ بازی های کامپیوتری
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
saeid2010
در حال رشد
در حال رشد


تاريخ عضويت: شنبه 16 مرداد 1389
تعداد ارسالها: 38
محل سكونت: همین جا


5 شنبه 21 بهمن 1389 - 18:58
پاسخ بصورت نقل قول
واقعا عالي بود
اميدوارم ادامه داشته باشه
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
AMIR REZAs
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 3 شنبه 11 اسفند 1388
تعداد ارسالها: 335
محل سكونت: تهران


5 شنبه 21 بهمن 1389 - 19:28
پاسخ بصورت نقل قول
سلام
خیلی خیلی ممنون Laughing Laughing

منتظر دومیش هستیم Very Happy
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
AMIR REZAs
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 3 شنبه 11 اسفند 1388
تعداد ارسالها: 335
محل سكونت: تهران


5 شنبه 21 بهمن 1389 - 19:31
پاسخ بصورت نقل قول
سلام
خیلی خیلی ممنون Laughing Laughing

منتظر دومیش هستیم Very Happy
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
AshkaN_666i
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: 5 شنبه 27 آبان 1389
تعداد ارسالها: 951
محل سكونت: NoWhere Land


5 شنبه 21 بهمن 1389 - 19:33
پاسخ بصورت نقل قول
واقعا عالي........

_________________
-

If you say pls, because it is shorter than "please", I will say no, because it is shorter than yes
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
mard koochak
بازی ساز
بازی ساز


تاريخ عضويت: 1 شنبه 26 دي 1389
تعداد ارسالها: 135
محل سكونت: دسکتاپ بعضی وقتها هم توی گیم میکر


5 شنبه 21 بهمن 1389 - 20:13
پاسخ بصورت نقل قول
خیلی خیلی خوب....
Laughing

_________________
سرزمین رویا+گاد اف وار = عشق من
سه سوته شدم در حال رشد،فردا می شم پیر بازی سازی!
سخنان مرد کوچکی:
بدی نکن تا بدی نبینی!
جراح یه پا قاتل حرفه ایه!
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر
 

نويسنده
پيغام
m_basij
پیر بازی سازی
پیر بازی سازی


تاريخ عضويت: 5 شنبه 19 شهريور 1388
تعداد ارسالها: 523
محل سكونت: داخل کد


2 شنبه 16 اسفند 1389 - 17:52
پاسخ بصورت نقل قول
عالیه ادامه بدین.

_________________
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 2 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد
برو به صفحه 1, 2  بعدي


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |