webForumDet fria alternativet

ändra alpha med as

Flashur Flash, Shockwave

7 svar · 281 visningar · startad av matthew

Medlem sedan okt. 2001166 inlägg
Frågan#1

Hejsan,
jag undrar hur jag gör en snygg fade på ett mc med actionscript?
Är helt ny på detta! men har iaf gjort ett försök.

function fadeOut()
{
	if(targetClip._alpha<=0)
	{
		return true;	
	}
	else
	{
		x=(targetClip._alpha) -1;
		targetClip._alpha=x;
		setInterval(fadeOut(), 1000);
		status = "Status: " + targetClip._alpha;
	}
}

btn_next.onRelease = function() 
{
		if(fadeOut())
			displayObject(getNext());
};

Har också provat med setInterval(fadeOut(), 1000) i det rekursiva anropet.Bilden fadas direkt, så någon nertoning syns inte.vad kan jag göra?

mvh,
matt

Medlem sedan feb. 20034 441 inlägg
#2

Jag gjorde följande en gång:

mitt_mc.onEnterFrame = function(){
mitt_mc._alpha++;
     
     if(mitt_mc._alpha >= 100){
          trace("Klar...");
     }
}

Sen är det att rekommendera att i ifsatsen när det är klart så att säga, att du då tar bort onEnterframe funktionen.

Det här är ytterliggare ett sätt, hur processorvänligt vet jag inte hur det är, men det är ett senare problem ;)

Medlem sedan feb. 200465 inlägg
#3

annars är nog en prototype att föredra.

// speed = hastigheten i millisekunder
// dec = hur mycket som ska "försvinna" åt gången
MovieClip.prototype.fadeOut = function(speed, dec) {
	var alpha = 100;
	fadeIt = function() {
		if (_alpha<=0) {
			clearInterval(itv);
		} else {
			alpha -=  dec;
			_alpha = alpha;
		}
	};
	itv = setInterval(fadeIt, speed);
};
// aktivera funktionen på vilket mc som helst, t.ex.
hello.fadeOut(50, 10);
// 50 = speed  och  10 = dec
Medlem sedan okt. 2001166 inlägg
#4

Tack för ditt svar!!

men varför ska jag använda prototype?
Har ingen aning om vad det är!

Har skrivit om koden nu, fade functionen verkar fungera fast nu är det något annat som blir fel.

När jag en gång tryckt fram en bild så fadas den fram och tillbaka hela tiden. Den slutar aldrig... Kanske en logik miss men det tror jag inte.

function init(success) 
{ 
    if(success) 
    { 
        rootHandler=this.firstChild; 
        currentObject = rootHandler.firstChild; 
         
        if(currentObject != null) 
            displayObject(currentObject); 
    } 
} 

function displayObject(obj) 
{ 
    if(fadeOut(); 
        targetClip.loadMovie(obj.attributes.imgURL); 

    if(fadeIn(); 
     
    btn_next._visible = (currentObject.nextSibling != null)?1:0; 
    btn_previous._visible = (currentObject.previousSibling != null)?1:0; 
} 

function fadeOut() 
{     
    return x =(targetClip._alpha--<=0)?true:(setInterval(fadeOut,600)); 
} 

function fadeIn() 
{ 
    return x =(targetClip._alpha++>=100)?true:(setInterval(fadeIn,600)); 
} 

function getNext() 
{ 
    return currentObject = currentObject.nextSibling; 
} 

function getPrevious() 
{ 
    return currentObject = currentObject.previousSibling; 
} 

btn_next.onRelease = function() {displayObject(getNext());}; 
btn_previous.onRelease = function() {displayObject(getprevious());};

Kan det bli fel om alphan sätts till ett negativt tal eller om det blir större än 100?

Medlem sedan okt. 2001166 inlägg
#5

Nu vet jag hur prototype funkar... Det verkar användbart!!

Jag undrar fortfarande vad som händer om alphan sätts till ett negativt tal eller större än 100.

hmm undra om jag måste sätta clearInteraval?!

Medlem sedan nov. 20018 492 inlägg
#6

Är det negativt blir det väl 0 och är det större än hundra blir det väl hundra?

Medlem sedan feb. 200465 inlägg
#7

varför ange ett negativt tal?
håll dig till tal mellan noll och hundra, finns väl ingen anledning att ange andra värden? ;)

Medlem sedan feb. 200465 inlägg
#8

om du nu inte vill "fada" tillbaka den...
då har jag ändrat prototypen lite åt dig, så att den känner av det automatiskt:

MovieClip.prototype.fade = function(speed, dec, method) {
	var alpha = _alpha;
	fadeIt = function () {
		if (method == "in") {
			if (_alpha>=100) {
				clearInterval(itv);
			} else {
				alpha += dec;
				_alpha = alpha;
			}
		} else if (method == "out") {
			if (_alpha<=0) {
				clearInterval(itv);
			} else {
				alpha -= dec;
				_alpha = alpha;
			}
		}
	};
	itv = setInterval(fadeIt, speed);
};
dittMC.fade(100, 10, "out");
dittMC.fade(100, 10, "in");
143 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)