flash on 2010-7-7

by sowcodWonderfl
蟻の行列シミュレータを作ろうとしている。
♥0 | Line 124 | Modified 2010-07-07 23:25:15 | MIT License
play

ActionScript3 source code

/**
 * Copyright sowcodWonderfl ( http://wonderfl.net/user/sowcodWonderfl )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/yO4O
 */

package {
    // 蟻の行列シミュレータを作ろうとしている。
    
    import flash.display.DisplayObject;
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.Event;
    
    public class AntField extends Sprite {
        private const FIELD_WIDTH:Number = 250;
        private const FIELD_HEIGHT:Number = 250;
        
        private var ants:Vector.<MovableAnt>;
        
        public function AntField() {
            this.ants = new Vector.<MovableAnt>();
            
            this.generateAnts();
            this.addEventListener(Event.ENTER_FRAME, this.enterFrame);
        }
        private function generateAnts():void {
            var ant:MovableAnt= new MovableAnt();
            ant.x = 100;
            ant.y = 100;
            this.addChild(ant);
            this.ants.push(ant);
        }
        private function enterFrame(ev:Event):void {
            var ant:MovableAnt;
            for each(ant in this.ants) {
                ant.step();
            }
        }
    }
}
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Graphics;

class MovableAnt extends Sprite {
    private var content:AntGraphics;
    public function MovableAnt()
    {   
        this.content = new AntGraphics();
        this.addChild(this.content);
    }
    public function step():void
    {
        this.content.step();
        this.x++;
    }
}


class AntGraphics extends Bitmap {
    private var frames:Vector.<BitmapData>;
    private var currentFrame:int = 0;
    private var maxFrame:int = 4;
    
    public function AntGraphics()
    {
        super();
        
        frames = new Vector.<BitmapData>();
        
        //this.bitmapData = new BitmapData(20, 20, true, 0xFFFFFF00);
        
        this.setAnimationFrames();
        
        step();
    }
    
    public function step():void
    {
        currentFrame = (currentFrame + 1) % maxFrame;
        this.bitmapData = frames[currentFrame];
    }
    
    // Set Ant's animation frame.
    private function setAnimationFrames():void
    {
        var antAll:Sprite = new Sprite();
        var antBody:Sprite = createBody();
        var antSense:Sprite = createSense();
        antAll.addChild(antBody);
        antSense.x = 5;
        antSense.y = 0;
        antAll.addChild(antSense);
        
        // draw Ant's graphics for each frame.
        var data:BitmapData;
        var offsetMatrix:Matrix = new Matrix();
        var clipRect:Rectangle = new Rectangle(-15, -10, 10, 15);
        offsetMatrix.translate(15, 10);
        
        antSense.rotation = 0;
        data = new BitmapData(30, 20);
        data.draw(antAll, offsetMatrix);
        frames.push(data);
        
        antSense.rotation = 5;
        data = new BitmapData(30, 20);
        data.draw(antAll, offsetMatrix);
        frames.push(data);
        
        antSense.rotation = 0;
        data = new BitmapData(30, 20);
        data.draw(antAll, offsetMatrix);
        frames.push(data);
        
        antSense.rotation = -5;
        data = new BitmapData(30, 20);
        data.draw(antAll, offsetMatrix);
        frames.push(data);
    }
    public static function createBody():Sprite
    {
        var body:Sprite = new Sprite();
        var g:Graphics = body.graphics;
        g.lineStyle(undefined);
        // body
        g.beginFill(0x000000);
        g.drawCircle(0, 0, 3);
        g.endFill();
        // head
        g.beginFill(0x000000);
        g.drawCircle(5, 0, 4);
        g.endFill();
        // tail
        g.beginFill(0x000000);
        g.drawCircle(-5, 0, 3.5);
        g.endFill();
        
        return body;
    }
    
    public static function createSense():Sprite
    {
        var sense:Sprite = new Sprite();
        var g:Graphics = sense.graphics;
        g.lineStyle(0.5, 0x000000);
        g.moveTo(0,0);
        g.lineTo(5, 5);
        g.lineTo(3.5, 8);
        
        g.moveTo(0,0);
        g.lineTo(5, -5);
        g.lineTo(3.5, -8);
        
        return sense;
    }

}