flash on 2010-7-23
♥0 |
Line 167 |
Modified 2010-07-24 14:36:21 |
MIT License
archived:2017-03-20 03:12:04
ActionScript3 source code
/**
* Copyright dizgid ( http://wonderfl.net/user/dizgid )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/hCEd
*/
package {
import flash.events.MouseEvent;
import flash.display.Sprite;
[SWF(frameRate = "60", backgroundColor = "#000000")]
public class FlashTest extends Sprite {
public function FlashTest() {
// write as3 code here..
var _w_num:int = 5;
var _h_num:int = 5;
var offsetX:Number = -(4*15) * (_w_num-1) / 2;
var offsetY:Number = -(4*15) * (_h_num-1) / 2;
for(var i:int = 0; i < _w_num*_h_num; i++){
var panel:Panel = new Panel();
this.addChild(panel);
panel.x = stage.stageWidth * 0.5 + offsetX + Math.floor(i%_w_num)*(4*15);
panel.y = stage.stageHeight * 0.5 + offsetY + Math.floor(i/_h_num)*(4*15);
panel.addEventListener(MouseEvent.CLICK, mouseClickHandler);
}
}
private function mouseClickHandler(e:MouseEvent):void
{
Panel(e.currentTarget).startAnime();
}
}
}
import flash.events.Event;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.utils.getTimer;
internal class Panel extends Sprite
{
private var _preTime:Number;
public var dTime:Number;
private var _particles:Array;
public function Panel()
{
var _w_num:int = 6;
var _h_num:int = 6;
var pSize:Number = (15*4)/6;
_particles = [];
for(var i:int=0; i < _w_num*_h_num; i++){
var p:Particle = new Particle();
p.initSize = pSize;
p.size = pSize + 2;
p.x = Math.floor(i%_w_num) * pSize - (_w_num-1)*pSize/2;
p.y = Math.floor(i/_w_num) * pSize - (_h_num-1)*pSize/2;
p.z = 0;
p.iX = p.x;
p.iY = p.y;
p.draw();
this.addChild(p);
_particles.push(p);
}
_preTime = getTimer();
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private function enterFrameHandler(e:Event):void
{
update();
draw();
}
public function update():void
{
var nowTime:Number = getTimer();
dTime = nowTime - _preTime;
_preTime = nowTime;
//this.x += dTime/100 * 2;
for(var i:int = 0; i < _particles.length; i++){
var p:Particle = _particles[i];
p.update(dTime);
}
}
public function draw():void
{
for(var i:int = 0; i < _particles.length; i++){
var p:Particle = _particles[i];
p.draw();
}
}
public function startAnime():void
{
for(var i:int = 0; i < _particles.length; i++){
var p:Particle = _particles[i];
p.startAnime();
}
}
}
internal class Particle extends Sprite
{
public var size:Number;
public var initSize:Number = 0;
public var iX:Number;
public var iY:Number;
public var iZ:Number;
//
public var rX:Number;
public var rY:Number;
public var rZ:Number;
public var sX:Number;
public var sY:Number;
public var sZ:Number;
public var vAlpha:Number;
private var _isStartAnime:Boolean = false;
private var _isHide:Boolean = false;
public function Particle()
{
size = initSize+2;
// ランダムなパラメータ
sX = Math.random() * 40 -20;
sY = Math.random() * 40 -20;
sZ = Math.random() * 40 -20;
rX = Math.random() * 40 -20;
rY = Math.random() * 40 -20;
rZ = Math.random() * 40 -20;
sZ = Math.random() * 40 + 20;
vAlpha = 0.1;
rX *= 4;
rY *= 4;
rZ *= 4;
sZ *= 2;
draw();
}
public function startAnime():void
{
_isStartAnime = true;
}
public function update(dTime:Number):void
{
if(!_isStartAnime)
{
return;
}
if(this.alpha > 0 && !_isHide){
size = initSize * 0.75;
this.x += dTime / 1000 * sX;
this.y += dTime / 1000 * sY;
this.z += dTime / 1000 * sZ;
this.rotationX += dTime / 1000 * rX;
this.rotationY += dTime / 1000 * rY;
this.rotationZ += dTime / 1000 * rZ;
this.alpha += -dTime / 1000 * vAlpha;
}else{
_isHide = true;
initAnime(dTime);
}
}
private function initAnime(dTime:Number):void
{
size = initSize+2;
this.x = this.iX;
this.y = this.iY;
this.z = 0;
this.alpha += dTime / 1000;
this.rotationX = 0;
this.rotationY = 0;
this.rotationZ = 0;
if(this.alpha > 1.0){
this.alpha = 1.0;
_isStartAnime = false;
_isHide = false;
}
}
public function draw():void
{
var g:Graphics = this.graphics;
g.clear();
g.beginFill(0xffffff, 1.0);
g.drawRect(-size*0.5, -size*0.5, size, size);
g.endFill();
}
}