flash on 2010-7-7
蟻の行列シミュレータを作ろうとしている。
♥0 |
Line 124 |
Modified 2010-07-07 23:25:15 |
MIT License
archived:2017-03-20 12:55:12
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;
}
}