04.BitmapDataで雪を降らせてみる
forked from 【個人用】 Wonderfl Template (diff: 50)
BitmapData でPixelを変更する事で、オブジェクトより低負荷で処理できる
ActionScript3 source code
/**
* Copyright yooyke ( http://wonderfl.net/user/yooyke )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/pDgc
*/
// forked from nextyukke's 【個人用】 Wonderfl Template
package {
import flash.display.AVM1Movie;
import flash.events.MouseEvent;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.Event;
import flash.display.Sprite;
import flash.text.TextField;
public class FlashTest extends Sprite {
private const CREATE_COUNT:int = 2500;
private var tf_:TextField;
private var bd_:BitmapData;
private var list_:Object = new Object();
public function FlashTest() {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event=null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
stage.frameRate = 60;
create();
bd_ = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xff000000);
addChild(new Bitmap(bd_));
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function create():void {
var i:int;
for (i = 0; i < CREATE_COUNT; i++) {
list_[i] = createParam();
}
}
private function createParam():Object {
var x:Number = Math.random() * stage.stageWidth;
var y:Number = Math.random() * stage.stageHeight - stage.stageHeight;
var s:Number = Math.random() * 4;
return {x:x, y:y, s:s};
}
private function onEnterFrame(e:Event):void {
var i:int;
var x:Number, y:Number;
for (i = 0; i < CREATE_COUNT; i++) {
x = list_[i]["x"];
y = list_[i]["y"];
bd_.setPixel(x, y, 0x000000);
list_[i]["y"] += list_[i]["s"];
x = list_[i]["x"];
y = list_[i]["y"];
bd_.setPixel(x, y, 0xffffff);
if (y > stage.stageHeight) {
list_[i] = createParam();
}
}
}
private function debug(text:String):void {
if (!tf_) {
tf_ = new TextField();
tf_.selectable = false;
tf_.mouseEnabled = false;
tf_.width = stage.stageWidth;
tf_.height = stage.stageHeight;
addChildAt(tf_, 0);
}
tf_.text = text;
}
}
}