Arvanttt

تند و سریع

Arvant

تند و سریع












فصل چهارم:پیمایش Scene ها

جمعه, ۱۶ آبان ۱۳۹۳، ۰۲:۴۱ ب.ظ

قبلاَ تاحدودی با کلاس های Scene و Layer آشنا شدیم اما برای مرور یادآور می شوم که یک سین(scene) مجموعه ای از لایه  (Layer) هاست و در هر نمایش فقط یک سین قابل نمایش وجود دارد در حالی که این سین خود می تواند شامل لایه های مختلف باشد .

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

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

از آنجا که بیشتر کارهای انجام شده در این فصل قبلاَ انجام شده است پس به صورت خلاصه آنها را ذکر می کنم :

  1. هدف اصلی ایجاد سین هایی برای صفحه اسپلش و صفحه اصلی بازی است .
  2. بک گراند مربوط به صفحه اسپلش را با نام splash.png را به پوشه منابع اضافه می کنیم و در فایل resourse.js نیز آن را ثبت می کنیم.
  3. یک فایل js جدید با نام splash.js به پروژه اضافه می کنیم .
  4. در فایل splash.js یک سن جدید با نام SplshScene ایجاد کرده و بعد از ایجاد لایه ای با نام SplashScreenLayer آن را به سین اضافه می کنیم .

5. در فایل splash.js و در تابع سازنده لایه SplashLayer یک تابع را از طریق متد schedule که در فصل قبل ذکر شد به صورت مکرر فراخوانی می کنیم تا با یک تاخیر زمانی خاص (در اینجا 5 ثانیه ) برسیم و سپس با استفاده کلاس cc.director به سین بعدی مراجعه می کنیم .

 

cc.director.runScene(new MainMenuScene()); 

6.و برای آنکه صفحه اسپلش اسکرین هم اولین صفحه ای باشد که اجرا می شود در فایل main.js نیز کلاس SplashScene را به عنوان اولین سین فراخوانی می کنیم .

 

cc.director.runScene(new SplshScene());

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

توجه : من در این فصل اسم فایل app.js را که در چند فصل قبل با آن کار می کردیم به MenuScene.js  تغیر نام دادم .

برای اینکار کافی است که که در رویدادی که برای کلیک دکه شروع بازی تعریف کردیم به سین GameScene مراجعه کنیم .

 

 cc.director.runScene(new GameScense());

 

و تمام...

 

  • اگر می بینید که مطالب این فصل به صورت خلاصه بیان شده است به این خاطر است که اکثر مطالب در فصول قبلی مورد بحث قرار گرفته است و نیازی به تکرار مجدد آنها نبود .
  • چنانچه با خطای با عنوان عدم تعریف سین های جدید در Cocos IDE رو به رو شدید(در برنامه های که خودتون ایجاد می کنید)احتمالا به علت عدم اضافه شدن اتوماتیک فایل جدید به فایل پروژه cocos ide است که برای حل این خطا کافی است به صورت دستی فایل خود را به فایل project.json موجود در ریشه پروژه  و در بخش jsList اضافه کنید .(البته من فقط یک بار این مشکل برام پیش اومد)

لینک فایل های فصل چهارم

 

  • موافقین ۹ مخالفین ۴
  • جمعه, ۱۶ آبان ۱۳۹۳، ۰۲:۴۱ ب.ظ
به اشتراک می گذارم : به اشتراک بگذاریم به اشتراک بگذاریم به اشتراک بگذاریم به اشتراک بگذاریم

نظرات  (۲)

ممنونم.

یک نکته: برای ایجاد تاخیر در splash screen می توان به جای:

var timecount = 0;
this.schedule(delay, 1);
function delay(dt){
    timecount++;
    if(timecount > 1){
        cc.director.runScene(new MainMenuScene());
    }	
}
از scheduleOnce استفاده کرد و مستقیماً عدد ۵ را قرار داد:
this.scheduleOnce(delay, 5);
function delay(dt){
    cc.director.runScene(new MainMenuScene());
}
پاسخ:
خیلی هم عالی
قبلاً برای کلید play تعریف کرده بودیم که هنگام کلیک دو سکانس داشته باشد اول افزایش اندازه و سپس برگشت به حالت اول. حالا می خواهم سکانس سومی اضافه کنم که صحنه بازی (GameScene) را پس از انجام آن دو سکانس اجرا کند ولی موفق نشدم. فکر می کنید مشکل از کجا باشد؟ این هم کد بنده:
playItem.runAction(cc.sequence(cc.scaleTo(0.1, 1.2, 1.2), cc.scaleTo(0.1, 1, 1), cc.director.runScene(new GameScene())));
این هم جواب نداد:
playItem.runAction(cc.sequence(cc.scaleTo(0.1, 1.2, 1.2), cc.scaleTo(0.1, 1, 1), cc.CallFunc(cc.director.runScene(new GameScene()), this)));
شما اگر از alert هم استفاده کنید ابتدا alert اجرا می شود سپس آن دو سکانس.
پاسخ:
سلام فکر کنم یه همچین مشکلی رو تو نسخه c++ هم با منو داشتم اینجا که خیلی مهم نیست ولی اگه خیلی لازم بود معمولاَ یک راهش اینه که یک اسپرایت رو شبه دکمه در آورد و تو رویداد تاچ لایه براساس مختصات و اندازه اسپرایت عمل تاپ کردن رو شبیه سازی کرد.
:)