04.BitmapDataで雪を降らせてみる

by yooyke forked from 【個人用】 Wonderfl Template (diff: 50)
BitmapData でPixelを変更する事で、オブジェクトより低負荷で処理できる
♥0 | Line 66 | Modified 2010-12-03 17:24:54 | MIT License
play

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;
        }
    }
}

Forked