شهروز مدیر انجمن
تاريخ عضويت: جمعه 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 می کنیم:
بسیار خوب. ساختار اصلی شکل گرفت. هدف ما در این آموزش، ایجاد 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 |
|