ایده شما چیه !؟ : نحوه افزایش انرژی در بازیها

Fanous

Well-Known Member
سلام دوستان

اگر اهل بازی های موبایلی باشین ، احتمالا با بازیهایی برخورد کردین که برای انجام هر مرحله ، به مقدار مشخصی انرژی نیاز هست
و انرژی های موجود با گذشت زمان زیاد میشن ، مثلا هر 15 دقیقه یا هر 1 ساعت ، یک انرژی به انرژی های موجود اضافه میشه

سوال من اینه که توی فلش چجوری این انرژی رو زیاد کنیم
مثلا اگه قراره هر 30 دقیقه یک انرژی اضافه کنیم ، به چه روشی اینکار رو انجام بدیم؟
ایده شما چیه ؟

روشهایی که به ذهن خودم رسیده ، هرکدوم یه مشکلی داره:
1 - استفاده از ساعت آنلاین ، که باعث میشه همیشه واسه بازی به اینترنت نیاز باشه و قابلیت آفلاین رو از ما میگیره
2 - استفاده از ساعت گوشی ، که اگه کاربر ساعت گوشی رو تغییر بده ، توی کار ما اختلال ایجاد میشه و مثلا کاربر می تونه با تغییر زمان ، انرژی موجود رو زیاد کنه

ممنون میشم اگر ایده ای دارین ، با من به اشتراک بگذارین
 

mmz2006

Active Member
شما می تونی از یه تایمر فراگیر توی پروژه تون استفاده کنی و هر دقیقه یا هر فریم خاصی ،اونو سیو کنی و دفعه بعد که بازیتون اجرا میشه اون زمان قبلی رو فراخوانی کنی.
البته استفاده از تایمر به این شکل شاید رم و سی پی یو رو در گیر و سنگین کنه . در عمل نمی دونم چطور میشه.

بد نیست ببینیم بازی های دیگه از چه روشی استفاده می کنن.
مثلا مجموعه بازی Candy Crush Soda که فلش نیست البته از روش شماره 2 که گفتین استفاده می کنه و مشکلی که فرمودین رو هم داره.
 

Fanous

Well-Known Member
شما می تونی از یه تایمر فراگیر توی پروژه تون استفاده کنی و هر دقیقه یا هر فریم خاصی ،اونو سیو کنی و دفعه بعد که بازیتون اجرا میشه اون زمان قبلی رو فراخوانی کنی.
البته استفاده از تایمر به این شکل شاید رم و سی پی یو رو در گیر و سنگین کنه . در عمل نمی دونم چطور میشه.

بد نیست ببینیم بازی های دیگه از چه روشی استفاده می کنن.
مثلا مجموعه بازی Candy Crush Soda که فلش نیست البته از روش شماره 2 که گفتین استفاده می کنه و مشکلی که فرمودین رو هم داره.

ممنون دوست من
هدف شما اینه که با فراخوانی زمان قبل و مقایسه اون با زمان حال ، حساب کنی چندتا انرژی باید به کاربر اضافه کنیم
خب باز هم به مشکل برمیخوریم ، اگه بازی بسته بشه و زمان و تاریخ گوشی تغییر کنه و بازی دوباره اجرا بشه ، حساب کتابمون بهم میریزه
کاربر می تونه زمان رو یک روز جلو ببره و با این کار مخزن انرژیش رو پر کنه !!
 

ghasemMMb

New Member
سلام
ما می تونیم مقدار زمان را تو یه متغیر ذخیره کنیم(ذخیره دایمی) بعد در مراتب بعدی که بازی اجرا میشه این متغیر فراخوانی بشه و با زمان فعلی جمع بشه.
مثلا ما 50 دقیقه بازی می کنیم.و از بازی خارج میشیم.در پایان بازی متغیر ما میشه 50.
در مرتبه بعدی متغیر ما از 50 شروع و هر 1 دقیقه یکی به متغیر ما اضافه بشه.
 
آخرین ویرایش:

mmz2006

Active Member
سلام
ما می تونیم مقدار زمان را تو یه متغیر ذخیره کنیم(ذخیره دایمی) بعد در مراتب بعدی که بازی اجرا میشه این متغیر فراخوانی بشه و با زمان فعلی جمع بشه.
مثلا ما 50 دقیقه بازی می کنیم.و از بازی خارج میشیم.در پایان بازی متغیر ما میشه 50.
در مرتبه بعدی متغیر ما از 50 شروع و هر 1 دقیقه یکی به متغیر ما اضافه بشه.

سلام
آفرین
منظور من همین بود
 

Fanous

Well-Known Member
سلام
ما می تونیم مقدار زمان را تو یه متغیر ذخیره کنیم(ذخیره دایمی) بعد در مراتب بعدی که بازی اجرا میشه این متغیر فراخوانی بشه و با زمان فعلی جمع بشه.
مثلا ما 50 دقیقه بازی می کنیم.و از بازی خارج میشیم.در پایان بازی متغیر ما میشه 50.
در مرتبه بعدی متغیر ما از 50 شروع و هر 1 دقیقه یکی به متغیر ما اضافه بشه.

سلام وتشکر
مشکل این روش اینه که در مدت زمانیکه کاربر بازی رو بسته و بازی نمیکنه ، مخزن انرژیش پر نمیشه ، درصورتیکه توی فاصله زمانی که برنامه بسته هم باشه ، باید مخزن انرژی کم کم پر بشه و فلسفه اصلی این کار هم اینه که کاربر مدت زمان طولانی بازی نکنه ، بلکه مدتی برنامه رو ببنده و صبر کنه تا مخزنش پر بشه
توی روش شما فقط مدت زمان هنگام بازی محاسبه میشه و زمانهایی که برنامه بسته است نادیده گرفته میشه
 

ghasemMMb

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

mmz2006

Active Member
دوستان من یک آموزش پیدا کردم برای ساخت یک ANE که کار اون ارسال دستورات از ایر ، در حالتی که در بکگراند هستش:
http://www.lorenzonuvoletta.com/create-an-air-ane-for-android-to-dispatch-background-tasks/

آیا کسی می تونه این ANE رو بسازه ؟ شاید از این طریق بشه یه کارهایی انجام داد
ممنون

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

در هر صورت من Ane این لینکی که گفتین یعنی BackgroundTasker رو براتون قرار می دم.

بعد از ایمپورتش توی پروژه باید از کد زیر استفاده کنید که تابع ، در پس زمینه ، هر ثانیه یک بار اجرا میشه:

[JSS]import com.lorenzonuvoletta.backgroundtasker.BackgroundTasker;

BackgroundTasker.instance.startTasker( task );
private function task():void{
trace("myTask");
}[/JSS]
 

پیوست ها

  • BackgroundTasker.zip
    5.5 کیلوبایت · بازدیدها: 5

Fanous

Well-Known Member
من ثمره این کار رو نمی دونم چیه دقیقا ، آخه تایمر خود فلش توی پس زمینه کار می کنه.
بعدش این روش هم خیلی مطمئن نیست چون برنامه های پس زمینه به راحتی قابل بستن اند.

در هر صورت من Ane این لینکی که گفتین یعنی BackgroundTasker رو براتون قرار می دم.

بعد از ایمپورتش توی پروژه باید از کد زیر استفاده کنید که تابع ، در پس زمینه ، هر ثانیه یک بار اجرا میشه:

[JSS]import com.lorenzonuvoletta.backgroundtasker.BackgroundTasker;

BackgroundTasker.instance.startTasker( task );
private function task():void{
trace("myTask");
}[/JSS]

سلام و ممنون از زحمتی که کشیدین
راستش توی توضیحاتش نوشته بود که این ane مثل یک سرویس عمل میکنه و اگر هم برنامه کاملا بسته بشه ، کار خودش رو انجام میده !
حالا من امتحانش می کنم ببینم جواب میده یا نه
بازهم یک دنیا تشکر
 

Fanous

Well-Known Member
من ثمره این کار رو نمی دونم چیه دقیقا ، آخه تایمر خود فلش توی پس زمینه کار می کنه.
بعدش این روش هم خیلی مطمئن نیست چون برنامه های پس زمینه به راحتی قابل بستن اند.

در هر صورت من Ane این لینکی که گفتین یعنی BackgroundTasker رو براتون قرار می دم.

بعد از ایمپورتش توی پروژه باید از کد زیر استفاده کنید که تابع ، در پس زمینه ، هر ثانیه یک بار اجرا میشه:

[JSS]import com.lorenzonuvoletta.backgroundtasker.BackgroundTasker;

BackgroundTasker.instance.startTasker( task );
private function task():void{
trace("myTask");
}[/JSS]


با تشکر مجدد از لطف شما دوست عزیز
من این ane رو تست کردم و اون چیزی که فکر می کردم رو انجام نداد
فقط وقتی برنامه درحال اجرا باشه ، کار می کنه و هروقت برنامه بسته بشه ، اون هم کار نمیکنه
فایل تست هم پیوست کردم که کدهاش اینه و کارش اینه که هر ثانیه یک متغیر و افزایش میده و ذخیره میکنه روی سیستم:

PHP:
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

var so:SharedObject = SharedObject.getLocal("fill_energy");
if (so.data.energy == undefined)
{
	so.data.energy = 0;
	so.flush();
}

exit.addEventListener(MouseEvent.MOUSE_UP, exitapp);
function exitapp(event:MouseEvent)
{
	NativeApplication.nativeApplication.exit();
}

energy_text.text = String(so.data.energy);

import com.lorenzonuvoletta.backgroundtasker.BackgroundTasker;
BackgroundTasker.instance.startTasker( task );
function task()
{
	var energy_no:Number = Number(so.data.energy);
	energy_no +=  1;
	so.data.energy = energy_no;
	so.flush();
}

توی نت یک ane پیدا کردم که وقتی برنامه کاملا هم بسته باشه ، باز هم کار میکنه
این هم آدرسش:

https://github.com/myflashlab/alarmManager-ANE

شما که توی نوشتن ane وارد هستین ، آیا امکانش هست که ورژن اصلی اون رو نوشت ؟
 

پیوست ها

  • fill_energy.rar
    5.9 کیلوبایت · بازدیدها: 1
آخرین ویرایش:

mmz2006

Active Member
سلام و تشکر از شما دوست گرامی

چون کدهای جاوا و لایبراری swc رو در اختیار نداریم نمی تونم نسخه اصلی رو بسازم.ولی میشه از اول کد هاشو نوشت ولی فعلا دانش اینو ندارم.
ظاهرا باید از سرویس آلارم منیجر اندروید استفاده کرد و بعد کدهای سمت لایبراری فلش رو نوشت و در نهایت ساخت Ane .
 

Fanous

Well-Known Member
سلام و تشکر از شما دوست گرامی

چون کدهای جاوا و لایبراری swc رو در اختیار نداریم نمی تونم نسخه اصلی رو بسازم.ولی میشه از اول کد هاشو نوشت ولی فعلا دانش اینو ندارم.
ظاهرا باید از سرویس آلارم منیجر اندروید استفاده کرد و بعد کدهای سمت لایبراری فلش رو نوشت و در نهایت ساخت Ane .

سلام و ممنون که وقت گذاشتین
نمونه ای که گذاشته واقعا کار میکنه
ایشالا که در آینده نزدیک بتونین این کار رو انجام بدین :)
موفق باشین
 

جدیدترین ارسال ها

بالا