M matthew Medlem sedan okt. 2001 166 inlägg Frågan 19 feb. 2004 16:46 #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
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 ;)
K Kalliban Medlem sedan feb. 2004 65 inlägg 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
M matthew Medlem sedan okt. 2001 166 inlägg 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?
M matthew Medlem sedan okt. 2001 166 inlägg 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?!
M Mika3l Medlem sedan nov. 2001 8 492 inlägg Är det negativt blir det väl 0 och är det större än hundra blir det väl hundra?
K Kalliban Medlem sedan feb. 2004 65 inlägg 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? ;)
K Kalliban Medlem sedan feb. 2004 65 inlägg 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");