تبلیغات

انواع اکتیویتی در AndEngine + چند مورد دیگر

AndEngine | اندانجین

در بخش قبلی، نحوه‌ی ایجاد اولین پروژه‌ی AndEngine را آموزش دادیم اما مطمئنن سوالاتی از آن بخش ذهن شمارا درگیر خود ساخته است؛ از جمله‌ی این سوالات می‌توان به تفاوت بین کلاس BaseGameActivity  و SimpleBaseGameActivity  اشاره کرد.

همانطور که می‌دانید، نقطه‌ی شروع هر اپلیکیشن اندرویدی، یک Activity بوده و از طرفی دیگر، یک بازی از صفحه‌های مختلفی از قبیل منوها، درباره‌ما  و … و در نهایت صفحه‌ای که بازی در آن نمایش داده می‌شود، تشکیل شده است.
از این رو AndEngine، چندین نوع اکتیویتی در اختیار ما قرار می‌دهد:

  • BaseGameActivit
  • SimpleBaseGameActivity
  • LayoutGameActivity
    اجازه‌ی استفاده از کیت ابزارسازی بومی اندروید را به ما می‌دهد.
  • SimpleLayoutGameActivity
    نسخه‌ی ساده شده‌ی مورد قبل است.
  • SimpleAsyncGameActivity

چرخه حیات در AndEngine

AndEngine 1-10

یک مثال ساده:

اگر این بازی ( ما به این می گیم بازی شما چی می گین؟ 😀 ) را اجرا کنید، نتیجه‌ی زیر را خواهید دید:

AndEngine 1- out 1

در این مثال، از BaseGameActivity  استفاده کردیم. توجه داشته باشید که نیازی نیست همه‌ی قسمت‌های چرخه‌ی حیات را مدیریت کنیم.

متدهای Override شده در مثال بالا:

  • متد onCreateEngineOptions
    تنظیمات اصلی بازی را می‌نویسیم.
  • متد onCreateResources
    منابع مورد نیاز بازی، از قبیل عکس، صدا، فونت و … را بارگذاری می‌کنیم.
  • متد onCreateResourcesFinished
    وقتی بارگذاری منابع در متد قبلی تمام شد، این متد اجرا می‌شود.
  • متد onCreateScene
    صحنه‌ی اصلی بازی ساخته می‌شود.
  • متد onPopulateScene
    اجزایی را که می‌خواهیم، در این‌جا به صحنه اضافه می‌کنیم.

کلاس Camera
دوربینمان می‌باشد که قرار است از طریق آن، نمایی از صحنه‌ی ایجاد شده را ببینیم. این دوربین، اندازه‌ی اصلی صفحه مارا بدون در نظر گرفتن این‌که دستگاه اندرویدی دارای چه اندازه‌ای است، مشخص می‌کند. یکی از انتخاب‌های خوب برای اندازه‌ی صفحه، 800 در 480 می‌باشد.
همچنین نگران اندازه‌های مختلف گوشی نباشید، چرا که این ResolutionPolicy است که مشخص می‌کند یک صحنه با اندازه‌ی 800 در 480 چگونه در دستگاه‌های مختلف با نسبت‌هایی که می‌دهد، نمایش داده شود.

دستور ScreenOrientation.LANDSCAPE_FIXED
برای مشخص کردن این است که بازی در حالت Landscape یا افقی و بدون چرخیدن صفحه اجرا شود.

Scene
بازی‌ها از صفحه‌های مختلفی تشکیل می‌شوند که هرکدام از این صفحه‌ها را با استفاده از scene می‌سازیم. برای تغییر scene باید متد setScene آبجکت mEngine را فراخوانی کرده و scene جدید را به داخل آن ارسال کنیم.

ResolutionPolicy

سوال اینجاست که چگونه یک صفحه‌ی 800 در 480 در صفحه‌های مختلفی قرار می‌گیرد؟
این اتفاق، به چیزی که ما انتخاب می‌کنیم بستگی دارد و این انتخاب ها شامل موارد زیر هستند:

  • FillResolutionPolic
    بازی به شکلی اجرا می‌شود که کل صفحه را در بر بگیرد با این احتمال که ممکن است اشکال داخل بازی دچار کشیدگی شوند. این مورد، در بسیاری از بازی‌ها خوب نیست.
  • FixedResolutionPolic
    بدون در نظر گرفتن اندازه‌ی واقعی دستگاه و اندازه‌ی دوربین، بخشی را با اندازه‌ی ثابتی که به وسیله‌ی پارامترهایش مشخص می‌شود، در دستگاه‌های مختلف نمایش می‌دهیم و این ممکن است باعث ایجاد فضای خالی شود.
  • RatioResolutionPolic
    بازی بیشترین فضای ممکن در صفحه را پوشش می‌دهد، بدون این‌که اشکال داخل بازی دچار کشیدگی شوند. این مورد را می‌توان بهترین حالت در نظر گرفت.
  • RelativeResolutionPolic
    این اجازه را به ما می‌دهد تا تصویرمان را از قسمت طول یا عرض کش دهیم، و این کشش هم براساس یک ضریب خاصی انجام می‌گیرد. در این‌جا باید با دقت عمل کنیم چراکه ممکن است با ضرایب بالایی که تنظیم می‌کنیم، بازی اجرا نشود.

سرعت اجرای بازی

بهترین حالت زمانیست که یک بازی در دستگاه‌های مختلف با سرعت یکسانی اجرا شود! اما چگونه ممکن است یک کد 1000 خطی در دو دستگاه که یکی سخت افزار خیلی قوی داشته و دیگری سخت افزار ضعیفی دارد، با سرعت برابری اجرا شوند؟

مثال قبلی در دستگاه‌های مختلفی با یک سرعت مساوی اجرا نمی‌شود ولی از آن جایی که بازی ایجاد شده در مثال قبلی در حد Call Of Duty و GTA V بود، این موضوع زیاد مهم نیست 😀

برای تعیین سرعت در دستگاه‌های مختلف، باید از یکی از موتورهایی که AndEngine ارائه می‌دهد استفاده کنیم.

  • موتور Engine
    ساده‌ترین انتخاب بوده و در BaseGameActivity هم به صورت پیش‌فرض مورد استفاده قرار گرفته است.
    این انجین هیچ اصولی را در نحوه‌ی محاسبه‌ی سرعت بازی در نظر نمی‌گیرد و به این خاطر، در دستگاه‌های مختلف، با سرعت متفاوتی اجرا خواهد شد.
    در اکثر بازی‌ها نمی‌توانیم از این موتور استفاده کنیم.
  • موتور FixedStepEngin
    در این انجین، حلقه‌ها و کدها و دستورات یک بازی، با در نظر نگرفتن قابلیت دستگاه، براساس آن بازه‌ی زمانی که طی می‌شود، به روز می‌شوند. (برای مثال، هرقدم بازی در یک شصتم ثانیه اجرا می‌شود)
  • موتور LimitedFPSEngin
    اجازه می‌دهد تا یک حدی بر تعداد فریم‌هایی که در یک ثانیه اجرا ‌می‌شوند قرار دهیم. اگر به تعداد حد مشخص شده، فریم اجرا شود، انجین کمی صبر می‌کند تا به یک ثانیه برسد و بعد از آن فریم‌های بعدی هم به همین ترتیب اجرا می‌شوند.
  • موتور SingleSceneSplitScreenEngine و  DoubleSceneSplitScreenEngine
    اجازه می‌دهند تا دو صفحه داشته باشیم که از آن‌ها می‌توانیم در بازی‌هایی که به Navigation نیاز دارند یا بازی‌های دو نفره، استفاده کنیم.

مثال بالا با استفاده از موتور LimitedFPSEngin:

درس قبلی (اولین پروژه)
تبلیغات
0
کانال تلگرام فول کده

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه