flashdevelopの方が公式より使いやすいな!
特にコードでつくっていく場合には。
flashdevelopでMainというプロジェクトを作って、
src/Main.asに書くとswfができる。
お手本を参考に(ただ削っただけ)、どこに何を書くべきなのかまとめておく。
お手本:http://wonderfl.net/c/rp2U/
Main.as
package{ import [SWF] public class Main extends Sprite{} private func():void{} } 要素だけ抽出するとこんな感じ。下のはより具体的
package { import flash.display.Bitmap; [SWF(width = "465", height = "465", backgroundColor = "0x000000", frameRate = "30")] //メンバ変数、コンストラクタ、その他関数の順番か。たしかにわかりやすい public class Main extends Sprite { private const WIDTH:Number = 465; private const HEIGH:Number = 465; private var _particles:Array;//なぜここで=[]しない? public function Main() { init(); } //new, addchild, addeventlistenerとかはここで private function init():void { _particles = []; _canvas = new BitmapData(WIDTH, HEIGH, false, 0x0); addChild(new Bitmap(_canvas)) as Bitmap; this.stage.addEventListener(Event.ENTER_FRAME, enterframeHandler); } //イベントハンドラ(関数)はprivate private function resetFunc(e:TimerEvent):void { (cTra.redMultiplier > 0.9)? cTra.redMultiplier = 0.8 : cTra.redMultiplier += 0.01; hanabi(); } private function hanabi():void { var i:int = 200; sx = Math.random()*WIDTH; sy = Math.random()*HEIGH/3; while (i--) createParticle(); //while(i--)という書き方か } private function createParticle():void { //ローカル変数には短い名前をつけたい var p:Particle = new Particle(); p.x = sx; p.y = sy; //配列に押し込む //管理する配列は、クラス変数 _particles.push(p); } //毎フレーム呼ぶ関数 private function enterframeHandler(e:Event):void { update();//update()の中で描画もしている } //lockすると軽くなるようだ private function update():void { //いろんな処理を施すため、少しでも軽くするためにlockしておく。→描画をロックするのね //以後、unlockがかかるまで見た目の描画は更新されない(裏では更新されてる) _canvas.lock(); //キャンバスをぼかす //_canvasはBitmapDataで、MainにaddChildされている _canvas.applyFilter(_canvas, _rect, new Point(), new BlurFilter(1, 1)); //_canvasの色を変える(超重要!) //ただ色を変えるだけでなく、古いピクセルの明度をどんどん落としていってる //これをコメントアウトすると大変なことに・・・。 _canvas.colorTransform(_rect, cTra); //_particles.lengthの数だけ処理 var i:int = _particles.length; //i--な理由は、spliceを使うから while (i--) { var p:Particle = _particles[i]; p.x += p.vx; p.y += p.vy; //_canvasのひとつのピクセルにパーティクルを描く _canvas.setPixel32(p.x, p.y, p.c); //パーティクルがステージ外に行ったりパーティクルの速度が.01を切ったら //_particles配列からそのパーティクルを除去する if ((p.x > stage.stageWidth || p.x < 0) || (p.y < 0 || p.y > stage.stageHeight) || Math.abs(p.vx) < .01 || Math.abs(p.vy) < .01) { this._particles.splice(i, 1); } } //処理が完了したのでunlockで更新。 _canvas.unlock(); //Glowエフェクト用Bitmapに描画。これを無くすと光ってるように見えない。試しに外してみると一目瞭然。 //多分BlendMode.ADDが効いてる・・・のかな?NORMALにしたらやばかった。 // //_glowはstageの1/4の大きさなので、_canvasを1/4の大きさにしたものをdrawしなければならない //ここでは1/4となってるが、addChildしてある「_glowを元としたBitmap」によって4倍されるので問題なし? //試しにMatrixをとってみると、ステージの4倍の大きさの_glowがお目見えします。 //花火がめちゃくちゃ近いよ!やけどするよ! _glow.draw(_canvas, new Matrix(0.25, 0, 0, 0.25)); } } } //AS3 CLASS class Particle { public var x:Number; public var y:Number; public var vx:Number; public var vy:Number; public var c:uint; public function Particle() { this.x = 0; this.y = 0; this.vx = 0; this.vy = 0; this.c = 0xFFFFFFFF; } }