forked from: 錯視 (Performance Improved!?)
forked from forked from: 錯視 (Fixed exception) (diff: 72)
パフォーマンス向上のために、addEventListener を 1つにまとめてみた。多少改善? ------------------------------------------------------- 渦巻きに見える
ActionScript3 source code
/**
* Copyright nitoyon ( http://wonderfl.net/user/nitoyon )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/whRh
*/
// パフォーマンス向上のために、addEventListener を
// 1つにまとめてみた。多少改善?
//-------------------------------------------------------
// 渦巻きに見える
package {
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.geom.Point;
import net.hires.debug.Stats;
[SWF (width = 400, height = 400, backgroundColor = 0x808080)]
public class FlashTest extends Sprite {
private var _srcCircle:Shape;
private var _canvas:Sprite;
public function FlashTest() {
addChild(new Stats());
_canvas = new Sprite();
addChild(_canvas);
const size:int = stage.stageWidth;
_canvas.x = size * 0.5;
_canvas.y = size * 0.5;
_srcCircle = new Shape();
var t:Number = 0;
var r:Number = size;
var d:Number = 100;
var pt:Point;
var g:Graphics = _srcCircle.graphics;
g.lineStyle(0, 0x000000, 0.0);
var tmpPt:Point;
var color:uint = 0x000000;
var angle:Number = 0;
var angled:Number = 10;
while (angle < Math.PI * 2) {
g.beginFill(color, 1.0);
pt = Point.polar(r, angle);
tmpPt = Point.polar(d, angle + Math.PI / 2);
g.moveTo(pt.x, pt.y);
pt = pt.add(tmpPt);
g.lineTo(pt.x, pt.y);
angle += angled * Math.PI / 180;
pt = Point.polar(r, angle);
tmpPt = Point.polar(d, angle + Math.PI / 2);
tmpPt = tmpPt.add(pt);
g.lineTo(tmpPt.x, tmpPt.y);
g.lineTo(pt.x, pt.y);
g.endFill();
color = 0xFFFFFF - color;
}
//addChild(_srcCircle);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private var cnt:int = 1;
private function enterFrameHandler(e:Event):void
{
cnt++;
if (cnt % 20 == 0) {
cnt = 0;
var sp:Sprite = new Sprite;
sp.graphics.copyFrom(_srcCircle.graphics);
_canvas.addChild(sp);
}
for (var i:int = 0; i < _canvas.numChildren; i++) {
sp = _canvas.getChildAt(i) as Sprite;
if (sp == null) continue;
sp.scaleX = sp.scaleY = sp.scaleX * .98;
if (sp.scaleX < 0.01) {
_canvas.removeChild(sp);
}
}
}
}
}