هانکوک جان یه لودینگ خواسته بودن... (اینجا:
http://forum.majidonline.com/showthread.php?t=72236 )
من چیزایی که به ذهنم رسید توش گذاشتم. اگر چیز خاصی به ذهنتون رسید که توش نبود بگید بذارم.
اینم آموزش و توضیح:
اول متغیر های لازم رو تعریف میکنیم:
BT برای کل بایت ها (حجم کل)
BL برای بایت های لود شده
PL برای درصد لود شده
TP برای زمان گذشته
TR برای زمان باقی مانده
SP برای سرعت لود
بعد همه رو مقدار دهی میکنیم:
دو تا متد هست که اساس لودیگ هاست:
PHP:
getBytesLoaded();
getBytesTotal();
اولی بایت های لود شده و دومی کل بایت ها رو برمیگردونه.
پس مقدار دهی BT و BL کاری نداره و مشخصه.
PL هم که درصد باشه... دیگه همه میدونن اول یه ضریب 0 تا 1 درست میکنیم بعد در 100 ضرب میکنیم.
برای این کار کافیه BL رو به BT تقسیم و در صد ضرب کنیم.
یه متد خب دیگه هم هست که میلی ثانیه های گذشته رو به ما میده.
برای TP هم از این متد استفاده میکنیم.
برای TR باید از تناسب استفاده کنیم میدونید که تو سرعت ثابت:
[tex]TR=frac{BR*TP}{BL}[/tex]
اینم برای TR.
برای SP هم کافیه مقدار بایت لود شده بر هر ثانیه رو بدست بیاریم که کافیه کل یابت های لود شده رو بر کل ثانیه های گذشته تقسیم کنیم.
حالا میگید که وقتی به فریم خاصی (2 یا 3 یا یه چیزی تو این مایه ها - هر چی فاصله با یک کمتر باشه cpu بیشتر مشغول میشه) میره چک کنه اگر همه فایل لود شده بود پخش کنه. اگر نه بره فریم یک.
PHP:
(BT != BL)?gotoAndPlay(1):play();
کد که بالا نوشتم معادل اینه:
PHP:
if(BT!=BL)
{
gotoAndPlay(1);
}
else
{
paly();
}
معمولا برای نمایش این اعداد (که حاصل تقسیم هستن و مقدار زیادی اعشار دارن) از یه تابع رند کننده استفاده میشه.
سه تا متد تو شیء Math هست برای این کار:
floor
round
ceil
اولی همون جزء صحیح تو ریاضی ه. یعنی اعشار رو حذف میکنه.
دومی همون رند توی آمار ه. یعنی اعشار بیشتر از نیم رو به بالا و اعشار کمتر از نیم رو به پایین گرد میکنه.
سومی هم که جزءصحیح +1 ه. یعنی همیشه به بالا گرد میکنه.
منم این تابع رو نوشتم که عدد A رو تا B رقم اعشار برمیگردونه.
استفاده از اینا تو کد دیگه باشه به سلیقه ی خودتون.
اینم کد کامل:
PHP:
/////////////
// Load //
/////////////
var BT = getBytesTotal();
var BL = 0;
var PL = 0;
var TP = 0;
var TR = 0;
var SP = 0;
/////////////
// Frame 1 //
/////////////
BL = getBytesLoaded();
PL = BL / BT * 100;
TP = getTimer / 1000;
TR = (BT - BL) * TP / BL;
SP = BL / TP;
/////////////
// Frame 2 //
/////////////
(BT == BL)?gotoAndPlay(1):play();
/////////////
// Rounder //
/////////////
function Round(A,B)
{
D = Math.pow(10,B);
C = A * D;
C = Math.floor(C);
C = C / D;
return C;
}