Tween24、途中停止でメモリリーク?
planeボタンを連打してもメモリは解放されます。
parallelボタンを連打するとメモリはどんどん増えます。
二つの処理の違いは基準となるTweenをparallelで包むか包まないかです。
serialで包んだ場合もparallel同様メモリが増えるようです。..
♥0 |
Line 80 |
Modified 2012-11-07 12:46:37 |
MIT License
archived:2017-03-09 15:28:51
ActionScript3 source code
/**
* Copyright sakusan393 ( http://wonderfl.net/user/sakusan393 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/sHlt
*/
package
{
import a24.tween.Tween24;
import com.bit101.components.PushButton;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.geom.Rectangle;
import net.hires.debug.Stats;
/**
* ...
* @author ...
*/
public class TweenTest extends Sprite
{
private var _sourceBmd:BitmapData;
private var _xyTween:Tween24;
private var _bmdArray:Array;
private var _bmArray:Array;
private var _tweenArray:Array = [];
private var _length:int;
public function TweenTest()
{
stage.addChild(new Stats);
_sourceBmd = new BitmapData(stage.stageWidth, stage.stageHeight);
_sourceBmd.perlinNoise(128, 128, 2, Math.random() as int, true, true);
addChild(new Bitmap(_sourceBmd));
_length = 300;
new PushButton(stage, 10, 200, "plane", planeClickHandler);
new PushButton(stage, 10, 240, "parallel", parallelClickHandler);
}
private function planeClickHandler(e:MouseEvent):void
{
clear();
_bmdArray = [];
_bmArray = [];
var ct:ColorTransform = new ColorTransform(1, 1, 1, 1, 50, 50, 50);
for (var i:int = 0; i < _length; i++)
{
_bmdArray[i] = new BitmapData(50, 50);
_bmdArray[i].draw(_sourceBmd, null, ct, null, new Rectangle(0, 0, 50, 50));
_bmArray[i] = new Bitmap(_bmdArray[i]);
this.addChild(_bmArray[i]);
_tweenArray[i] = Tween24.tween(_bmArray[i], 0.6, Tween24.ease.SineInOut).$$xy(Math.random() * 300, Math.random() * 300)
}
_xyTween = Tween24.parallel(_tweenArray);
_xyTween.play();
}
private function parallelClickHandler(e:MouseEvent):void
{
clear();
_bmdArray = [];
_bmArray = [];
var ct:ColorTransform = new ColorTransform(1, 1, 1, 1, 50, 50, 50);
for (var i:int = 0; i < _length; i++)
{
_bmdArray[i] = new BitmapData(50, 50);
_bmdArray[i].draw(_sourceBmd, null, ct, null, new Rectangle(0, 0, 50, 50));
_bmArray[i] = new Bitmap(_bmdArray[i]);
this.addChild(_bmArray[i]);
_tweenArray[i] =
Tween24.parallel(
Tween24.tween(_bmArray[i], 0.6, Tween24.ease.SineInOut).$$xy(Math.random() * 300, Math.random() * 300)
);
}
_xyTween = Tween24.parallel(_tweenArray);
_xyTween.play();
}
private function clear():void
{
if (_xyTween) _xyTween.stop();
else return;
for (var i:int = 0; i < _length; i++)
{
_bmdArray[i].dispose();
this.removeChild(_bmArray[i]);
}
_bmdArray = null;
_bmArray = null;
}
}
}