Volledige versie bekijken : alpha tween die halverwege blijft steken
raymondvanmil
%Europe/Berlin %971 %2009, 00:18
Ik ben het al een paar keer tegen gekomen en kan er niet meer omheen het op te lossen. Een fade die soms wel, soms niet zijn einde haalt.
Ik doe verder niks verkeert lijkt me zo:
var fadeKeuze:Tween = new Tween(_keuze, "alpha", Regular.easeOut, 1, 0, 2, true);
Hij stopt in dit geval omdat er een xml geladen is, maar waarom ou een tween met een xml vechten?? Omdat er een verbinding naar buiten is en dat het 'm tye druk word? Ik bedoel ik zie geen keiharde programma logica, kan bijna niet anders dan een bug zijn.
Dus als ik van alpha 1 naar 0 ga, blijft hij ergens steken. Andersom heb ik het ook al meegemaakt..
Blueheart
%Europe/Berlin %333 %2009, 08:59
gebruik je mx 2004?
probeer es die lijn 2 keer te schrijve? ik noem maar its geks
Nidd
%Europe/Berlin %361 %2009, 09:40
Hey,
Dit komt door de Garbage Collector. Deze verwijderd (om de zoveel tijd) objecten waar geen verwijzing meer naar bestaat.
Waarschijnlijk overschrijf je de var 'fadeKeuze' met een volgende Tween of niet?
Grtz,
Niels.
raymondvanmil
%Europe/Berlin %844 %2009, 21:15
Ik gebruik cs4..
Ik heb het nog eens met een trace gechecked, hij komt daar maar een keer, en het is de enige tween, en zeker die var wordt niet vaker gebruikt.. dus:S
De enige oplossing die ik nu heb is ze ultra kort te houden, maar dat kan toch niet de bedoeling zijn?
Nu heb ik dit, als ik die tweede langer maak blijft hij ook hangen.
var fadeKeuze:Tween = new Tween(_keuze, "alpha", Regular.easeOut, 1, 0, 4, false);
fadeKeuze.addEventListener (TweenEvent.MOTION_FINISH, motionFadeKeuzeEnd);
function motionFadeKeuzeEnd(event:Event){
_keuze.visible = false;
var fadeContent:Tween = new Tween(_content, "alpha", Regular.easeOut, 0, 1, 2, false);
}
Nidd
%Europe/Berlin %350 %2009, 09:25
Hey,
Wat gaat er nu dan precies fout? Bij mij werkt jouw code gewoon. Zet voor de tweens in ieder geval de duration op 10 frames, dat is stukken makkelijker testen en het zou niets moeten uitmaken hoe lang de tweens zijn.
Grtz,
Niels.
raymondvanmil
%Europe/Berlin %762 %2009, 19:18
Ok, "het zou niets moeten uitmaken" is bekend anders dacht ik niet dat het een bug was. En iets onderbreekt het. En de vraag is hoe dat iets het doet als het niet direct iets met tweens te maken heeft. Maar niemand die de fout herkend.. Zal het wel een hele specefieke interactie zijn die min mij code spookt..
Jan
%Europe/Berlin %403 %2009, 10:41
Nu heb ik dit, als ik die tweede langer maak blijft hij ook hangen.
Da's een teken dat de GarbageCollector langskomt nog voordat je tween ten einde is. Je gebruikt 'var' binnen een functie waardoor je een lokale variabele aanmaakt. Zo'n variabele bestaat enkel binnen die functie. Als die functie (motionFadeKeuzeEnd) ten einde is (je tween is dan nog niet ten einde) dan bestaat die var fadeContent niet meer en dus heeft de Garbage collector alle recht om die var op te ruimen.
Maak dus die var aan buiten de functie of stop ze in een array of zo.
var fadeKeuze:Tween = new Tween(_keuze, "alpha", Regular.easeOut, 1, 0, 4, false);
fadeKeuze.addEventListener (TweenEvent.MOTION_FINISH, motionFadeKeuzeEnd);
function motionFadeKeuzeEnd(event:Event)
{
_keuze.visible = false;
var fadeContent:Tween = new Tween(_content, "alpha", Regular.easeOut, 0, 1, 2, false);
}
trace(fadeContent);//null
Dus:
fadeKeuze.addEventListener (TweenEvent.MOTION_FINISH, motionFadeKeuzeEnd);
var fadeContent:Tween;
function motionFadeKeuzeEnd(event:Event)
{
_keuze.visible = false;
fadeContent = new Tween(_content, "alpha", Regular.easeOut, 0, 1, 2, false);
}
Gebruik aub de juiste tags rond je script. [ as] [/as]
Groeten;
Jan
raymondvanmil
%Europe/Berlin %576 %2009, 14:50
hey, dat antwoord maakt sense! Daar had ik nooit aan gedacht, ik wist dat vars die binnen een functie aangemaakt worden niet erbuiten bekend zijn, ik wist niet dat ze opgeruimd werden door the 'GarbageCollector'.
Super bedankt voor de oplossing!
ps. en ja ik zal de as tags voortaan gebruiken!
grt Ray
raymondvanmil
%Europe/Berlin %062 %2009, 02:30
ok om dit topic af te ronden de oplossing die voor me werkt en erg simpel is
ik maak een array aan aan het begin van de package
public var tweens:Array = new Array();
de tween aan de array toevoegen zorgt ervoor dat hij buiten de functie is gedefinieerd en niet door mister GarbageCollector wordt weggehaald
var fadeKeuze:Tween = new Tween(_keuze, "alpha", Regular.easeOut, 1, 0, 2, true);
tweens.push(fadeKeuze);
Nidd
%Europe/Berlin %358 %2009, 09:36
Hey,
Om te voorkomen dat je een groot aantal verwijzingen naar tweens krijgt (hier zijn genoeg voorbeelden van te bedenken) kun je het beste de verwijzing weggooien wanneer een tween is geeindigd.
In plaats van een array zou ik in dit geval een dictionary object gebruiken voor de tween references.
import flash.utils.Dictionary;
var tweens:Dictionary = new Dictionary();
En dan vervolgens voor het aanmaken van een tween:
var myTween:Tween;
myTween = new Tween(_keuze, "alpha", Regular.easeOut, 1, 0, 2, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, onTweenFinish, false, 0, true);
tweens[myTween] = myTween;
En vervolgens voor het verwijderen van de tween wanneer deze niet meer wordt gebruikt:
function onTweenFinish(event:TweenEvent):void
{
// Verwijder de listener
event.target.removeEventListener(TweenEvent.MOTION _FINISH, onTweenFinish);
// Verwijder het object
tweens[event.currentTarget] = null;
// Verwijder de dictionary sleutel van het object
delete tweens[event.currentTarget];
}
Cheers!
Niels.
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.