افکت fade

maniaf69

Member
سلام
من یک سری المان تکراری بر روی صفحه دارم که اینها هرکدام movieclip هستند میخوام به صورت تصادفی خاموش و روشن بشن با زمان های متفاوت اینکارو کردم ولی یکم روی تایمش گیر دارم تایمنر گذاشتم ولی هرچی جلوتر میره سرعت اجرا میره بالاتر لطفا کمک کنید
نمونه کدی که نوشتم [JSS]
transform.colorTransform = randomColor();
function randomColor() {
var colors: Array = [0xFBD4A4, 0xCF9AB4, 0xD1CCE6, 0xEEA364, 0xA0D8F7, 0xFFF6B1, 0xAEC905, 0x009DE2];
var myColor: ColorTransform = this.transform.colorTransform;
myColor.color = colors[int(Math.random() * colors.length)];
return myColor;
}
var myTimer: Timer = new Timer(int(Math.random() * 3000));
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener(e: TimerEvent): void {


addEventListener(Event.ENTER_FRAME, fadeout);


}

myTimer.start();
function fadeout(e: Event) {
if (alpha <= 0) {
removeEventListener(Event.ENTER_FRAME, fadeout);
addEventListener(Event.ENTER_FRAME, fadein);


} else {
alpha -= 0.2;
}
}

function fadein(e: Event) {

if (alpha >= 1) {

removeEventListener(Event.ENTER_FRAME, fadein);
addEventListener(Event.ENTER_FRAME, fadeout);
transform.colorTransform = randomColor();


} else {
alpha += 0.2;
}
}[/JSS]
 

iloveflash

New Member
سلام دوست عزیز.
شما با یک تایمر بعد از تایمی بین 0 تا 3 ثانیه، دستور fadeoutرو اجرا میکنید، fadeout که تمام شد، خودکار fadein رو اجرا میکنه و این حلقه تکرار میشه و به نوبت این دو تابع فراخوان میشن. اما همزمان تایمر هم به کار خودش ادامه میده و هر چند لحظه یکبار fadeout رو فراخونی میکنه. همین مسئله که شما در دوجا fadeout رو فراخونی میکنید، باعث تداخل و به هم خوردن تنظیم زمانی میشه. پس شما در تایمر فقط باید یکبار تابع fadeout رو فراخوان کنید و فراخوان بعدی اون توسط fadein انجام میشه. پارامتر دوم در تایمر، تعداد تکرار ها رو مشخص میکنه:


[JSS]
//var myTimer: Timer = new Timer(int(Math.random() * 3000));
var myTimer: Timer = new Timer(int(Math.random() * 3000),1);
[/JSS]
اما در این حالت تکرار و فراخوانی دوتابع، پشت سر هم و از طریق یکدیگر انجام میشه و تایمر دیگه هیچ نقشی نداره. پس میتونید به جای اینکار فراخوانی تابع fadeout رو از داخل تابع fadein انجام ندید.
[JSS]
function fadein(e: Event) {
if (alpha >= 1) {
removeEventListener(Event.ENTER_FRAME, fadein);
//addEventListener(Event.ENTER_FRAME, fadeout); <====
transform.colorTransform = randomColor();
} else {
alpha += 0.2;
}
}
[/JSS]


اما در این صورت هم اگر زمان تایمر که به صورت تصادفی ایجاد میشه کمتر از زمان لازم برای یکبار اجرا شدن اون دوتابع باشه، بازهم این کار به خوبی انجام نمیشه و پرش دارید. یک راه برای اینکار اینه که به تایمر یک تایم حداقل مثلا یک ثانیه بدید:
[JSS]
var myTimer: Timer = new Timer(1000 + int(Math.random() * 2000));
[/JSS]


اما دو پیشنهاد دارم. اول اینکه به جای تایمر از setInterval استفاده کنید که تعداد خطوط شما رو کمتر میکنه، و دوم اینکه به جای استفاده از تابع برای کم و زیاد کردن آلفا، از کتابخانه GSAP استفاده کنید. (مگر اینکه حجم پردازش و میزان اشغال شدن رم برای شما خیلی مهم باشه و فایل بزرگی داشته باشید)


[JSS]
import flash.utils.setInterval
import com.greensock.*


transform.colorTransform = randomColor();
function randomColor() {
var colors: Array = [0xFBD4A4, 0xCF9AB4, 0xD1CCE6, 0xEEA364, 0xA0D8F7, 0xFFF6B1, 0xAEC905, 0x009DE2];
var myColor: ColorTransform = this.transform.colorTransform;
myColor.color = colors[int(Math.random() * colors.length)];
return myColor;
}


setInterval(fadeout, 1000+Math.random()*2000)
function fadeout()
{
TweenLite.to(this,.5,{alpha:0 , onComplete:fadein})
}
function fadein()
{
transform.colorTransform = randomColor();
TweenLite.to(this,.5,{alpha:1})
} [/JSS]


برای دانلود کتابخانه GSAP به آدرس زیر برید:
https://greensock.com/tweenlite-as
اون رو دانلود کنید و پوشه com رو کنار فایل پروژه قرار بدید.


آموزش استفاده از دستوران GSAP :
https://greensock.com/getting-started-as
 

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

بالا