مشکل هنگ کردن flash بخاطر استفاده از حلقه تو در تو

Saeed2vfx

Member
سلام.

من امروز یه برنامه نوشتم که داخلش از حلقه for بصورت تو در تو استفاده کردم که هر حلقه 50 بار تکرار میشه (یعنی 50 * 50) و موقع اجرای حلقه برنامه هنگ میکنه ! البته بعد از چند دقیقه از هنگ خارج میشه ولی بعضی وقتا حلقه ناقص اجرا میشه یا پیغام don't send معروف روی صفحه ظاهر میشه !

جالب اینجاست که وقتی تعداد اجرای حلقه هارو به 15 عدد کاهش میدم (یعنی 15 * 15) برنامه به خوبی و خوشی اجرا میشه !

میخواستم ببینم دوستان راه حلی سراغ دارن که این مشکل هنگ کردن در موقع اجرای حلقه رو حل کرد؟؟

اگر بشه موقع اجرای حلقه یه Progress Bar ایجاد کرد که تا زمان اجرای کامل حلقه ها روی صفحه ظاهر بشه که دیگه نوره الا نوره !!!

:rose:
 
آخرین ویرایش:

Insomnia

کاربر فعال
راه حل: عوض کردن نوع پیاده سازی ، حلقه های تودرتو زیاد هیچ وقت مناسب نبوده.
 

Saeed2vfx

Member
راه حل: عوض کردن نوع پیاده سازی ، حلقه های تودرتو زیاد هیچ وقت مناسب نبوده.

مثلاً با چه روش دیگه ای میشه یه صفحه شطرنج طراحی کرد؟

ببین کدی که من نوشتم اینه :

کد:
i = j = 0;
    for (i=0 ; i < 50 ; i++) {
        for (j=0 ; j < 50 ; j++) {
    var n = getNextHighestDepth();
    box.duplicateMovieClip("box" + n, n,
        {
            _X : (32/2)+i*32,
            _Y : (32/2)+j*32,
        });
      }
    }

من به مقداری که i و j بهم میدن نیاز دارم تا بتونم صفحه رو منظم طراحی کنم.
نمیدونم چه ساختار دیگه ای میتونه این نظمو برای من ایجاد کنه ؟؟ :-?
 

Saeedh2005

New Member
تو C# یه دستوری به اسم DoEvents بود که به سیستم عامل می گفتم به رخدادهای سیستمی عکس العمل نشون بده
اگه یه همچین دستوری توی Flash هم باشه مانع از هنگ کردن سیستم می شود
 

++Hadi++

Active Member
بهتره از اکشن 3 استفاده کنید.اکشن 2 خیلی ضعیفه و باگ های اینجوری زیادی داره...اینو آنا ساخت :
PHP:
for(var i:int=0;i<50;i++)
{
    for(var j:int=0;j<50;j++)
    {
        var mc:Symbol1=new Symbol1();
        this.addChild(mc);
        mc.x=10;
        mc.y=10;
    }
}
trace("finish");
البته بهتره اون مووی کلیپی که توش هست اگه قرار نیست فریم های اضافه داشته باشه ،اونو زیر کلاس Sprite کنید تا اضافات مووی کلیپ رو نداشته باشه و سریع تر نمونه سای شه و جای کمی رو تو رم بگیره.اگه قرار نیست عملیات اینتر اکتیو داخلش انجام بشه بهتره اونو از نوع shape بسازید.
 
آخرین ویرایش:

++Hadi++

Active Member
در ضمن نمی دونم چرا قراره تو یه بازی شطرنج اینهمه شی ساخته شه چون مثلا خونه های شطرنج 8 در 8 هست.معمولا بهتره تا حد امکان از الگریتم های حرفه ای تر استفاده شه.تو برنامه نویسی همیشه اون راهی که اول به مغز آدم خطور می کنه کند ترین و بدترین راهه...
 

Saeed2vfx

Member
بهتره از اکشن 3 استفاده کنید.اکشن 2 خیلی ضعیفه و باگ های اینجوری زیادی داره...اینو آنا ساخت :
PHP:
for(var i:int=0;i<50;i++)
{
    for(var j:int=0;j<50;j++)
    {
        var mc:Symbol1=new Symbol1();
        this.addChild(mc);
        mc.x=10;
        mc.y=10;
    }
}
trace("finish");
البته بهتره اون مووی کلیپی که توش هست اگه قرار نیست فریم های اضافه داشته باشه ،اونو زیر کلاس Sprite کنید تا اضافات مووی کلیپ رو نداشته باشه و سریع تر نمونه سای شه و جای کمی رو تو رم بگیره.اگه قرار نیست عملیات اینتر اکتیو داخلش انجام بشه بهتره اونو از نوع shape بسازید.

ممنونم هادی جان.
مگه شما بتونی این مشکلات عجیب غریبو حل کنی.

میشه یه توضیحی بدی این کدها دقیقاً چه عملی انجام میدن؟

در مورد اکشن 3 :
والا از اونجایی که من سالهاست دارم با swish کار میکنم، امکان نقل مکان کردن به flash ـو ندارم.
swish هم که اکشن 3 رو ساپورت نمیکنه :sad:
 

Saeed2vfx

Member
در ضمن نمی دونم چرا قراره تو یه بازی شطرنج اینهمه شی ساخته شه چون مثلا خونه های شطرنج 8 در 8 هست.معمولا بهتره تا حد امکان از الگریتم های حرفه ای تر استفاده شه.تو برنامه نویسی همیشه اون راهی که اول به مغز آدم خطور می کنه کند ترین و بدترین راهه...

شطرنجو به عنوان مثال گفتم (برای درک نیاز به متغیر های i , j )

کلاً هیچ راه حلی نیست که برنامه با حوصله کارهاشو انجام بده و هنگ نکنه ؟؟؟!!!

مثلاً کدی نیست که Refresh شدن صفحه (fps) و کارهای غیره ضروریه دیگه رو متوقف کنه تا برنامه محاسباتشو انجام بده و بعد دوباره ادامه بده.

تو C# یه دستوری به اسم DoEvents بود که به سیستم عامل می گفتم به رخدادهای سیستمی عکس العمل نشون بده
اگه یه همچین دستوری توی Flash هم باشه مانع از هنگ کردن سیستم می شود


ایول !! الان یه سرچی میزنم. خدا کنه تو فلشم باشه.
 
آخرین ویرایش:

++Hadi++

Active Member
فک نکنم تو سویش همچین امکاناتی باشه.البته می شه مووی کلیپو از بیرون stop کرد یعنی در حین نمونه سازی اسمشو صدا بزنید یه نقطه جلوش بزارید و بنویسید مثلا myBtn.stop();
 

Saeed2vfx

Member
فک نکنم تو سویش همچین امکاناتی باشه.البته می شه مووی کلیپو از بیرون stop کرد یعنی در حین نمونه سازی اسمشو صدا بزنید یه نقطه جلوش بزارید و بنویسید مثلا myBtn.stop();

خب این کاربردش چیه؟ یعنی عملیاتو متوقف میکنه ؟!

___________________________________________________________________________


توی فروم اصلی سوئیش سوالمو مطرح کردم. البته با زبان انگلیسی دستو پا خورد شده !!

امیدوارم سازندگانش یه جوابی داشته باشن ! :mad:
 

++Hadi++

Active Member
ببینید دوست عزیزم masoudn عزیز خیلی تو سویش استادند...اگر از ایشون بپرسید قطعا کمک شایانی به شما خواهند کرد.در مورد مووی کلیپ البته فک می کنم تو اکشن 1 و 2 و البته حتما باید تو سویش هم امکانات اینجوری باشه که شما بتونید یه Sprite تعریف کنید.
پس به این ترتیب شما می تونید یه شی نمایشی بسازید که تایم لاین نداره.در واقع مثل یه تک فریم و n تا لایه می مونه که قابلیت انیمیشنی رو نداره .موارد استفاده از Sprite اینه که اون بابای مووی کلیپه و مووی کلیپ از اون مشتق شده که دارای یه تایم لاین با مثلا n تا sprite پشت سر همه.خوب مووی کلیپ ساختمون داده ای هست که جای زیادی رو تو رم اشغال می کنه و البته به صورت پیش فرض play می شه و البته فک کنم ادوب شعورش به جایی رسیده باشه که وقتی یه مووی کلیپ 1 فرم داره ،خود به خود خودشو stop کنه ولی کلا تو برنامه نویسی باید از ساختمان داده ها به ساده ترین و کارا ترین حالت استفاده کرد.اگر آیتم های شما دارای تایم لاین و انیمیشن تو روت خودشون نیستند ،خوب چه بهتره از ساختمون داده ای مثل Sprite استفاده شه چون یه بچه وقتی از یه بابایی مشتق می شه هم امکانات باباشو داره و هم یه سری امکانات بهش اضافه شده این خاصیت OOP هست.
در مورد Sprite می شه گفت که اسپرایت می تونه شامل هر داده نمایشی مثل تکست باکس و مووی کلیپ بشه تا انیمیشن و ... رو ساپورت کنه والبته بازم پیشنهاد می دم اگه قراره حرکتی انجام شه ،با کد انجامش بدین نه با تایم لاین البته تا حد امکان.
کد من هم تو دو تا حلقه 50 تایی می یاد و از یه مووی کلیپ (اسپرایت کرده بودم) لینکیج شده یا بهتر بگم export شده ،نمونه سازی می کنه و تو یه متغیر محلی می ریزه و اونو addChild می کنه تا در جایی که معرفی کردیم که this باشه ،نمونه نمایشی رو اضافه کنه (اضافه کردن شی نمایشی به یه کانتینر) و نهایتا x و y هر شی رو تعیین کردیم .موفق باشید...
 

Saeed2vfx

Member
ببینید دوست عزیزم masoudn عزیز خیلی تو سویش استادند...اگر از ایشون بپرسید قطعا کمک شایانی به شما خواهند کرد.در مورد مووی کلیپ البته فک می کنم تو اکشن 1 و 2 و البته حتما باید تو سویش هم امکانات اینجوری باشه که شما بتونید یه Sprite تعریف کنید.
پس به این ترتیب شما می تونید یه شی نمایشی بسازید که تایم لاین نداره.در واقع مثل یه تک فریم و n تا لایه می مونه که قابلیت انیمیشنی رو نداره .موارد استفاده از Sprite اینه که اون بابای مووی کلیپه و مووی کلیپ از اون مشتق شده که دارای یه تایم لاین با مثلا n تا sprite پشت سر همه.خوب مووی کلیپ ساختمون داده ای هست که جای زیادی رو تو رم اشغال می کنه و البته به صورت پیش فرض play می شه و البته فک کنم ادوب شعورش به جایی رسیده باشه که وقتی یه مووی کلیپ 1 فرم داره ،خود به خود خودشو stop کنه ولی کلا تو برنامه نویسی باید از ساختمان داده ها به ساده ترین و کارا ترین حالت استفاده کرد.اگر آیتم های شما دارای تایم لاین و انیمیشن تو روت خودشون نیستند ،خوب چه بهتره از ساختمون داده ای مثل Sprite استفاده شه چون یه بچه وقتی از یه بابایی مشتق می شه هم امکانات باباشو داره و هم یه سری امکانات بهش اضافه شده این خاصیت OOP هست.
در مورد Sprite می شه گفت که اسپرایت می تونه شامل هر داده نمایشی مثل تکست باکس و مووی کلیپ بشه تا انیمیشن و ... رو ساپورت کنه والبته بازم پیشنهاد می دم اگه قراره حرکتی انجام شه ،با کد انجامش بدین نه با تایم لاین البته تا حد امکان.
کد من هم تو دو تا حلقه 50 تایی می یاد و از یه مووی کلیپ (اسپرایت کرده بودم) لینکیج شده یا بهتر بگم export شده ،نمونه سازی می کنه و تو یه متغیر محلی می ریزه و اونو addChild می کنه تا در جایی که معرفی کردیم که this باشه ،نمونه نمایشی رو اضافه کنه (اضافه کردن شی نمایشی به یه کانتینر) و نهایتا x و y هر شی رو تعیین کردیم .موفق باشید...

خیلی مرسی هادی جان !

بعضی وقتا باید از کار فاصله بگیری و از دور بهش نگاه کنی... امروز یه مسافرت اجباری رفتم و فرصتی شد تا یکم روی این مسئله فکر کنم.
حدوداً فهمیدم مشکل کجاست.
این خارجکی ها هم که انگار زبون مارو نفهمیدن یا تحریم اطلاعاتیمون کردن !

به نتیجه رسیدم، حتماً همینجا خبر میدم.
فعلاً یاحق
 

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

بالا