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





صفحه اول انجمنها -> گفتگوی آزاد پیرامون مسایل متفرقه -> آموزش ساخت Object Instancing با Quick2D
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي

آموزش ساخت Object Instancing با Quick2D
نويسنده
پيغام
شهروز
مدیر انجمن
مدیر انجمن


تاريخ عضويت: جمعه 16 مرداد 1383
تعداد ارسالها: 3279
محل سكونت: Germany


شنبه 8 مهر 1391 - 20:35
پاسخ بصورت نقل قول
سلام.
موضوع Object Instancing یکی از نیاز های اولیه اکثر بازی هاست.
زمانی که شما نیاز پیدا میکنید از یک Object به تعداد مورد نیاز تکثیر کنید. در Quick2D این کار با عمق بیشتری انجام میشه و دسترسی کامل به تک تک پارامتر های یک آبجکت میتونه وجود داشته باشه.

سعی کنید آبجکت هاتون رو همیشه در ابتدای فایل js تعریف کنید.
به کلاس زیر توجه کنید:
كد:
function Object ()
{
   this.id=0;
   this.x=0;
   this.y=0;
   this.direction=0;
   this.speed=0;
   this.life=0;
   this.draw = function ()
   {
      draw_sprite(this.id,this.x,this.y,this.life*3);
   }
}

این کلاس با نام Object شامل تعدادی پارامتر و یک تابع داخلی هست. پارامتر ها بصورت شماره شناسایی، مختصات محور های x و y ، جهت، سرعت و عمر هست.
تابع draw با استفاده از این پارامتر ها آبجکت مورد نظر رو ترسیم میکنه.

تنظیمات پروژه رو بصورت زیر انجام بدید:
كد:
function Project_Settings (id)
{
   set_title("Object Instancing");
   set_screen(800,600);
}

در این آموزش ما فقط از یک متغیر و یک آرایه استفاده می کنیم:
كد:
var rocks=new Array();
var can_create;

آرایه rocks کاملاً خالی و تعریف نشده است. بنابراین نیاز داریم تا در رویداد Start این آراه رو مقدار دهی کنیم.
كد:
for (var i=0;i<20;i+=1)
   {
      rocks[i]=new Object();
      rocks[i].id=load_texture("gem_"+Math.floor(Math.random()*5)+".png");
   }

یک حلقه ساده این کار رو برای ما انجام میده. تعداد loop این حلقه بیانگر تعداد کپی هایی هست که ما نیاز داریم ( در اینجا 20 )
سپس در هر خانه از آرایه rocks ، یک کلاس Object قرار می دهیم. به این ترتیب ما آرایه ای از Object ها خواهیم داشت.
سپس برای هر id یک تصویر اتفاقی از پوشه Sprites انتخاب می کنیم.
كد:
gem_0.png
gem_1.png
gem_2.png
gem_3.png
gem_4.png

در انتها متغیر can_create را true می کنیم:
كد:
can_create=true;

بسیار خوب. ساختار اصلی شکل گرفت. هدف ما در این آموزش، ایجاد 20 آبجکت در شکل های متفاوت است که در مکان کلیک شده تولید و در جهات مختلف شروع به حرکت می کنند.
پس قبل از هر کاری به سراغ رویداد OnMouseButtonPressed میریم.
(این رویداد در rev 1.0.3 تغییراتی کرده است و اگر شما از rev 1.0.2 استفاده میکنید، شدیداً توصیه می کنم که آخرین نسخه Quick2D رو از اینجا دانلود کنید )
كد:
function onMouseButtonPressed (e)
{
   if (can_create)
   {
      can_create=false;
      for (var i=0;i<20;i+=1)
      {
         rocks[i].x=e.X;
         rocks[i].y=e.Y;
         rocks[i].life=80;
         rocks[i].direction=Math.floor(Math.random()*360);
         rocks[i].speed=Math.floor(Math.random()*3)+3;
         rotate(rocks[i].id,rocks[i].direction);
      }
   }
}

نترسید، خیلی هم پیچیده نیست. متغیر can_create کنترل میکنه که چه موقع ما اجازه ساخت دوباره آبجکت ها رو داریم. سپس یک حلقه داریم که به تعداد خانه های آرایه که از قبل آماده سازی شده، تکرار میشه. در این حلقه ما مکان ماوس رو به x و y آرایه میدیم و یک عمر 80 تایی برای هر آبجکت تعیین می کنیم.
سپس یک جهت و سرعت اتفاقی تولید کرده و به آبجکت ها می دهیم و در آخر، هر آبجکت را با توجه به زاویه اش، می چرخانیم.

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

حالا به سراغ رویداد Main میریم.
كد:
function Main (id)
{
   if (!can_create)
   {
      for (var i=0;i<20;i+=1)
      {
         if (rocks[i].life>0)
         {
            rocks[i].life-=1;
            rocks[i].draw();
         }else{
            can_create=true;
         }
         rocks[i].x+=xval_to_direction(rocks[i].id,rocks[i].direction,rocks[i].speed);
         rocks[i].y+=yval_to_direction(rocks[i].id,rocks[i].direction,rocks[i].speed);
      }
   }
}

خب، در اینجا مشخص کردیم وقتی که اجازه ساخت آبجکت رو ندارید، یعنی قبلاً اونو ساختید. بنابراین نمایشش میدیم.
دوباره یک حلقه 20 تایی که هر آبجکت رو در صورتی که عمرش بیشتر از 0 باشه نمایش میده و از عمرش کن میکنه. در صورتی که عمر آبجکت ها تمام بشه، شما اجازه ساختن دوباره آبجکت ها رو دارید.
و در انتها با استفاده از توابع xval_to_direction و yval_to_direction ، هر آبجکت در جهت خودش با سرعت مختص به خودش حرکت میکنه.


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

www.Persian-Designers.com
www.Quick2D.wordpress.com

با تشکر
شهروز

_________________




استدیوی نرم افزاری بلوبالک
www.Bluebulk.info
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر
 

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


 
پرش به:  


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


unity3d

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