<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>noCreativity.com &#187; Tweens</title>
	<atom:link href="http://nocreativity.com/blog/tag/tweens/feed" rel="self" type="application/rss+xml" />
	<link>http://nocreativity.com</link>
	<description>The life and discoveries of a new media artist</description>
	<lastBuildDate>Sat, 07 Jan 2012 17:03:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>De boze boze garbage collector in ActionScript 3</title>
		<link>http://nocreativity.com/blog/de-boze-boze-garbage-collector-in-actionscript-3</link>
		<comments>http://nocreativity.com/blog/de-boze-boze-garbage-collector-in-actionscript-3#comments</comments>
		<pubDate>Wed, 18 Jun 2008 16:04:21 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Garbage collector]]></category>
		<category><![CDATA[Scope]]></category>
		<category><![CDATA[Tweens]]></category>

		<guid isPermaLink="false">http://nocreativity.com/blog/?p=115</guid>
		<description><![CDATA[Sinds ik vorig jaar in september begonnen ben met ActionScript 3 te leren, en te gebruiken, ben ik al veel op het probleem gestoten waar ik niet-werkende, of maar half-werkende (ActionScript) tweens kreeg. Ik dacht altijd dat het aan mijn slechte coding skills lag, maar op termijn begon ik toch wat meer zelfvertrouwen krijgen, en [...]]]></description>
			<content:encoded><![CDATA[<p>Sinds ik vorig jaar in september begonnen ben met ActionScript 3 te leren, en te gebruiken, ben ik al veel op het probleem gestoten waar ik niet-werkende, of maar half-werkende (ActionScript) tweens kreeg. Ik dacht altijd dat het aan mijn slechte coding skills lag, maar op termijn begon ik toch wat meer zelfvertrouwen krijgen, en besefte ik dat het probleem niet zozeer bij mij lag.</p>
<p>Tijdens het ontwikkelen van de site voor mijn eindwerk in december liep de emmer over: Alweer een project waarin het ActionScript tweenen niet wilde lukken. <a href="http://blog.desaturated.be/" target="_self" target="_blank">Gerrit</a> kwam me helpen, en na even zoeken kon hij me vertellen dat de fout inderdaad niet bij mij lag, maar bij de <a href="http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)" target="_blank" target="_blank">garbage collector</a> in de Flash Player.<br />
Mijn probleem was vanaf dan opgelost, en in elk project waar ik nu ActionScript-matige tweens aanmaak kan ik dat probleem meteen uit de weg gaan, maar ik zie nog enorm veel vragen opduiken waarin dit exact zelfde probleem besproken wordt.<span id="more-115"></span></p>
<p><strong>Hoe ontstaat dit probleem?<br />
</strong>Het probleem zelf ontstaat (voor zover ik het heb gezien) als je in een functie/handler een lokale tween aanmaakt, zonder externe referenties te behouden.</p>
<p style="padding-left: 30px;">Voorbeeld:</p>
<pre class="brush: actionscript">function someHandler(e:Event):void{
var tween:Tween = new Tween(someMC,&#039;scaleX&#039;,Regular.easeOut,0,1,5,true);
}</pre>
</p>
<p>In bovenstaand voorbeeld wordt de functie someHandler opgeroepen eens er een event gedispatched wordt. Op dat moment wordt een tween aangemaakt in de scope van die functie. Eens deze functie doorlopen is, wordt deze verlaten, en zomee is deze scope niet meer in gebruik. Er is op dat moment geen referentie meer naar je tween object, dat je zonet hebt aangemaakt.</p>
<p>De garbage collector verwijdert variablen/objecten aan de hand van die referenties: Als er objecten zijn in scopes waar niets meer naar verwijst, is dat &#8216;garbage&#8217; en kan zomee verwijderd worden.<br />
Het tween object is hier ook onderhevig aan: Eens je de scope van die someHandler functie verlaat, is er geen referentie meer aanwezig naar je tween object, ookal is die visueel actief op de stage van je Flash movie. Als de garbage collector van de Flash Player dan voorbij komt om op te ruimen wordt je tween object verwijderd: op het scherm stopt je tween voordat hij klaar is.</p>
<p><strong>De oplossing?</strong><br />
Er zijn verschillende manieren om de garbage collector te vertellen dat we ons tween object nog nodig hebben.</p>
<ul>
<li>We declareren de tween globaal. Hiermee zal hij altijd in main scope aanwezig zijn, en zomee niet verwijderd worden tenzij wij dat zelf aangeven.</li>
<li>We kunnen diezelfde globale tween &#8216;hergebruiken&#8217; in diepere scopes. (Handig als je maar 1 tween hebt, waarvan je zeker weet dat hij zichzelf nooit zal overschrijven/vervangen.)</li>
<li>We maken een globale array aan, waar we elke tween aan toevoegen. Op die manier is er ten alle tijde een referentie naar ons tween object, en zal de garbage collector het niet kunnen verwijderen, tenzij we de tween uit de array verwijderen.</li>
</ul>
<p>De laatste oplossing heeft mij al veel gediend, en is weinig moeite.</p>
<p style="padding-left: 30px;">
<pre class="brush: actionscript">var garbage:Array = new Array();
function someHandler(e:Event):void{
var tween:Tween = new Tween(someMC,&#039;scaleX&#039;,Regular.easeOut,0,1,5,true);
garbage.push(tween);
}</pre>
</p>
<p><span style="text-decoration: line-through;">Dit is een nogal onprofessionele manier</span> Ik vind dit nogal een vuile manier om het probleem uit de wereld te helpen, maar het is wel de essentie van de oplossing.<br />
Bij extreem veel tweens in een applicatie die lang in gebruik is, is het misschien geen slecht idee om die array af en toe wat uit te kuisen: Tweens die niet meer gebruikt worden uit deze array verwijderen.</p>
<p>Er zijn mensen die me zeggen dat het gebruik van Tweener of TweenLite dit probleem ook meteen oplost. Ikzelf heb nog niet genoeg met Tweener gewerkt om daar zelf een oordeel over te kunnen vellen.</p>
<p>Ik hoop dat ik hier een aantal mensen kan mee helpen, gezien dit toch een populair probleem schijnt te blijven.</p>
]]></content:encoded>
			<wfw:commentRss>http://nocreativity.com/blog/de-boze-boze-garbage-collector-in-actionscript-3/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

