※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!
wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)
ダラ外宇宙水槽 for Wonderfl forked from: ダラ外宇宙水槽 for Wonderfl
- // forked from nemu90kWw's ダラ外宇宙水槽 for Wonderfl
- package
- {
- import flash.display.*;
- import flash.events.*;
- import flash.net.*;
- import flash.system.*;
- // カーソルキーで操作できます。
- [SWF(width="465", height="465", frameRate="60")]
- public class Darius extends Sprite
- {
- public static const WIDTH:int = 233;
- public static const HEIGHT:int = 233;
- private var buffer:BitmapData;
- private var screen:Bitmap;
- private var loader:Loader;
- private var fish:Fish;
- private var bg:BG;
- function Darius()
- {
- Wonderfl.capture_delay(3);
- loader = new Loader();
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
- loader.load(new URLRequest("http://assets.wonderfl.net/images/related_images/2/2c/2c65/2c65f2686591075d582ac89a915d8819975e8155"), new LoaderContext(true));
- }
- private function onLoadComplete(e:Event):void
- {
- loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);
- buffer = new BitmapData(WIDTH, HEIGHT, false, 0);
- screen = new Bitmap(buffer);
- screen.scaleX = screen.scaleY = 2;
- addChild(screen);
- fish = new Fish(Bitmap(loader.content).bitmapData);
- bg = new BG();
- Key.setListener(stage);
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- }
- private function onEnterFrame(e:Event):void
- {
- buffer.fillRect(buffer.rect, 0x181818);
- bg.draw(buffer);
- if(Key.isDown(40)) {fish.speed -= 0.05; fish.wait = 60*3;}
- if(Key.isDown(38)) {fish.speed += 0.05; fish.wait = 60*3;}
- if(Key.isDown(37)) {fish.head.dir += 4; fish.wait = 60*3;}
- if(Key.isDown(39)) {fish.head.dir -= 4; fish.wait = 60*3;}
- fish.main();
- fish.draw(buffer);
- }
- }
- }
- import flash.display.*;
- import flash.geom.*;
- import flash.events.*;
- class Fish
- {
- private var parts:Vector.<Segment> = new Vector.<Segment>(7, true);
- private var dirlog:Vector.<int> = new Vector.<int>();
- public var head:Segment;
- public var speed:Number = 4;
- public var dest:Number = 128;
- public var wait:int = 90;
- function Fish(bmp:BitmapData)
- {
- //反転画像の生成
- var temp:BitmapData = new BitmapData(Segment.WIDTH*16, Segment.HEIGHT*7, true, 0);
- var matrix:Matrix = new Matrix();
- temp.copyPixels(bmp, bmp.rect, new Point(0, 0));
- matrix.scale(-1, 1);
- matrix.translate(Segment.WIDTH*17, 0);
- temp.draw(bmp, matrix, null, null, new Rectangle(Segment.WIDTH*9, 0, Segment.WIDTH*7, Segment.HEIGHT*7));
- for(var i:int = 0; i < 7; i++)
- {
- var segment:Segment = new Segment(temp, i);
- parts[i] = segment;
- }
- //パーツ毎の距離
- parts[0].size = 44;
- parts[1].size = 32;
- parts[2].size = 28;
- parts[3].size = 22;
- parts[4].size = 24;
- parts[5].size = 24;
- //初期位置
- head = parts[0];
- head.x = Darius.WIDTH/2 + 80;
- head.y = 8;
- head.z = Segment.D;
- head.dir = 128;
- for(i = 0; i < 7*3+5; i++) {
- dirlog.unshift(head.dir);
- }
- }
- public function main():void
- {
- head.x += MathEx.getVectorX(head.dir, speed);
- head.z += MathEx.getVectorY(head.dir, speed);
- head.x = MathEx.limit(-Darius.WIDTH+80, head.x, Darius.WIDTH-80);
- head.z = MathEx.limit(Segment.D, head.z, Segment.D+600);
- if(wait > 0) {
- wait--;
- }
- else {
- if(Math.random() < 0.03) {dest = Math.floor(Math.random() * 16) * 16;}
- if(MathEx.getBearing(head.dir, dest) < -2) {
- head.dir += 4;
- }
- else if(MathEx.getBearing(head.dir, dest) > 2) {
- head.dir -= 4;
- }
- }
- if(head.dir >= 256) {head.dir -= 256;}
- if(head.dir < 0) {head.dir += 256;}
- dirlog.pop();
- dirlog.unshift(head.dir);
- //体節の処理
- for(var i:int = 1; i < parts.length; i++)
- {
- var segment:Segment = parts[i];
- var front:Segment = parts[i-1];
- segment.x = front.x + MathEx.getVectorX(front.dir, -front.size);
- segment.z = front.z + MathEx.getVectorY(front.dir, -front.size)+0.1;
- segment.y = front.y;
- segment.dir = dirlog[i*3+5];
- }
- }
- public function draw(screen:BitmapData):void
- {
- var temp:Vector.<Segment> = parts.slice(); //配列のコピー
- temp.sort(function(x:Segment, y:Segment):Number {return x.z <= y.z ? 1 : -1;}); //Zソート
- for(var i:int = 0; i < temp.length; i++) {
- temp[i].draw(screen);
- }
- }
- }
- class Segment
- {
- private var frames:Vector.<BitmapData> = new Vector.<BitmapData>(16, true);
- private var matrix:Matrix = new Matrix();
- public static const WIDTH:int = 128;
- public static const HEIGHT:int = 160;
- public static const D:int = 400;
- private var cx:int = WIDTH/2;
- private var cy:int = HEIGHT/2 + 4;
- public var x:Number = 0;
- public var y:Number = 0;
- public var z:Number = 0;
- public var dir:int = 0;
- public var size:int = 30;
- function Segment(bmp:BitmapData, num:int)
- {
- for(var i:int = 0; i < 16; i++)
- {
- var frame:BitmapData = new BitmapData(WIDTH, HEIGHT, true, 0);
- frame.copyPixels(bmp, new Rectangle(i * WIDTH, num * HEIGHT, WIDTH, HEIGHT), new Point(0, 0));
- frames[i] = frame;
- }
- }
- public function draw(screen:BitmapData):void
- {
- matrix.identity();
- matrix.translate(-cx, -cy);
- matrix.scale(D / z, D / z);
- matrix.translate((D * x / z) + Darius.WIDTH/2, (D * y / z) + Darius.HEIGHT/2);
- screen.draw(frames[Math.floor((dir+8) / 16+12) % 16], matrix);
- }
- }
- class BG
- {
- private var list:Vector.<Star> = new Vector.<Star>(400, true)
- function BG()
- {
- for(var i:int = 0; i < list.length; i++) {
- list[i] = new Star();
- }
- }
- public function draw(screen:BitmapData):void
- {
- for each(var star:Star in list) {
- star.draw(screen);
- }
- }
- }
- class Star
- {
- public var x:Number;
- public var y:Number;
- public var speed:Number;
- public var color:uint;
- function Star()
- {
- x = Math.random()*Darius.WIDTH;
- shuffle();
- }
- public function shuffle():void
- {
- y = Math.random()*Darius.HEIGHT;
- speed = Math.random()+0.1;
- color = MathEx.rand_int(0, 0xC0)*0x10000 + MathEx.rand_int(0, 0xC0)*0x100 + MathEx.rand_int(0, 0xC0);
- }
- public function draw(screen:BitmapData):void
- {
- x -= speed;
- if(x < 0) {
- x = Darius.WIDTH;
- shuffle();
- }
- screen.setPixel(x, y, color);
- }
- }
- class MathEx
- {
- public static function limit(min:Number, target:Number, max:Number):Number {return Math.max(min, Math.min(target, max));}
- public static function rand_int(min:int, max:int):int {return Math.floor(Math.random()*(max-min+1)+min);}
- public static function getVectorX(dir:Number, speed:Number):Number {return Math.cos(Math.PI/128*dir)*speed;}
- public static function getVectorY(dir:Number, speed:Number):Number {return Math.sin(Math.PI/128*dir)*speed;}
- public static function getBearing(dir1:Number, dir2:Number):Number
- {
- var d1:Number = normalizeAngle(dir1);
- var d2:Number = normalizeAngle(dir2);
- if(d2-128 > d1) {d1 += 256;}
- if(d2+128 < d1) {d1 -= 256;}
- return d1-d2;
- }
- public static function normalizeAngle(dir:Number):Number
- {
- if (dir < -128) {
- dir = 256 - (-dir % 256);
- }
- dir = (dir + 128) % 256 - 128;
- return dir;
- }
- }
- class Key
- {
- private static var down:Vector.<Boolean> = new Vector.<Boolean>(256, true);
- public static function setListener(target:InteractiveObject):void
- {
- target.stage.focus = target;
- target.addEventListener(KeyboardEvent.KEY_DOWN, function (event:KeyboardEvent):void {down[event.keyCode] = true;});
- target.addEventListener(KeyboardEvent.KEY_UP, function (event:KeyboardEvent):void {down[event.keyCode] = false;});
- target.addEventListener(FocusEvent.FOCUS_OUT, onFocusOut);
- }
- private static function onFocusOut(event:FocusEvent):void
- {
- event.currentTarget.stage.focus = event.currentTarget;
- //キーを押しながらフォーカスが外れると押しっぱなしになる現象の対策
- for(var i:int = 0; i < down.length; i++) {down[i] = false;}
- }
- public static function isDown(keycode:int):Boolean {
- return down[keycode];
- }
- }
ダラ外宇宙水槽 for Wonderfl 増やしてみた forked from: ダラ外宇宙水槽 for Wonderfl
- // forked from nemu90kWw's ダラ外宇宙水槽 for Wonderfl
- package
- {
- import flash.display.*;
- import flash.events.*;
- import flash.net.*;
- import flash.system.*;
- import net.hires.debug.Stats;
- // カーソルキーで操作できます。
- [SWF(width="465", height="465", frameRate="60")]
- public class Darius extends Sprite
- {
- private const NUM:int = 24;
- public static const WIDTH:int = 233;
- public static const HEIGHT:int = 233;
- private var buffer:BitmapData;
- private var screen:Bitmap;
- private var loader:Loader;
- private var fishes:Vector.<Fish> = new Vector.<Fish>();
- private var bg:BG;
- public static var pool:Array = new Array();
- function Darius()
- {
- Wonderfl.capture_delay(10);
- loader = new Loader();
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
- loader.load(new URLRequest("http://assets.wonderfl.net/images/related_images/2/2c/2c65/2c65f2686591075d582ac89a915d8819975e8155"), new LoaderContext(true));
- }
- private function onLoadComplete(e:Event):void
- {
- loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);
- Fish.setup(Bitmap(loader.content).bitmapData);
- stage.quality = StageQuality.LOW;
- buffer = new BitmapData(WIDTH, HEIGHT, false, 0);
- screen = new Bitmap(buffer);
- screen.scaleX = screen.scaleY = 2;
- addChild(screen);
- for(var i:int = 0; i < NUM; i++) {
- fishes.push(new Fish());
- }
- bg = new BG();
- addChild(new Stats());
- Key.setListener(stage);
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- }
- private function onEnterFrame(e:Event):void
- {
- buffer.fillRect(buffer.rect, 0x181818);
- bg.draw(buffer);
- for each(var fish:Fish in fishes)
- {
- if(Key.isDown(40)) {fish.speed -= 0.05; fish.wait = 60*3;}
- if(Key.isDown(38)) {fish.speed += 0.05; fish.wait = 60*3;}
- if(Key.isDown(37)) {fish.head.dir += 4; fish.wait = 60*3;}
- if(Key.isDown(39)) {fish.head.dir -= 4; fish.wait = 60*3;}
- fish.main();
- //fish.draw(buffer);
- }
- pool.sortOn("z", Array.NUMERIC | Array.DESCENDING);
- for(var i:int = 0; i < pool.length; i++) {
- pool[i].draw(buffer);
- }
- }
- }
- }
- import flash.display.*;
- import flash.geom.*;
- import flash.events.*;
- class Fish
- {
- private static var grp:BitmapData;
- private var parts:Vector.<Segment> = new Vector.<Segment>(7, true);
- private var dirlog:Vector.<int> = new Vector.<int>();
- public var head:Segment;
- public var speed:Number = 4;
- public var dest:Number = 128;
- public var wait:int = 0;
- public static function setup(bmp:BitmapData):void
- {
- //反転画像の生成
- grp = new BitmapData(Segment.WIDTH*16, Segment.HEIGHT*7, true, 0);
- var matrix:Matrix = new Matrix();
- grp.copyPixels(bmp, bmp.rect, new Point(0, 0));
- matrix.scale(-1, 1);
- matrix.translate(Segment.WIDTH*17, 0);
- grp.draw(bmp, matrix, null, null, new Rectangle(Segment.WIDTH*9, 0, Segment.WIDTH*7, Segment.HEIGHT*7));
- }
- function Fish()
- {
- for(var i:int = 0; i < 7; i++)
- {
- var segment:Segment = new Segment(grp, i);
- parts[i] = segment;
- Darius.pool.push(parts[i]);
- }
- //パーツ毎の距離
- parts[0].size = 44;
- parts[1].size = 32;
- parts[2].size = 28;
- parts[3].size = 22;
- parts[4].size = 24;
- parts[5].size = 24;
- //初期位置
- head = parts[0];
- head.x = 0;
- head.y = -150 + Math.random()*300;
- head.z = Segment.D + Math.random()*600;
- dest = Math.floor(Math.random() * 16) * 16;
- head.dir = dest;
- for(i = 0; i < 7*3+5; i++) {
- dirlog.unshift(head.dir);
- }
- }
- public function main():void
- {
- head.x += MathEx.getVectorX(head.dir, speed);
- head.z += MathEx.getVectorY(head.dir, speed);
- head.x = MathEx.limit(-Darius.WIDTH+80, head.x, Darius.WIDTH-80);
- head.z = MathEx.limit(Segment.D, head.z, Segment.D+600);
- if(wait > 0) {
- wait--;
- }
- else {
- if(Math.random() < 0.03) {dest = Math.floor(Math.random() * 16) * 16;}
- if(MathEx.getBearing(head.dir, dest) < -2) {
- head.dir += 4;
- }
- else if(MathEx.getBearing(head.dir, dest) > 2) {
- head.dir -= 4;
- }
- }
- if(head.dir >= 256) {head.dir -= 256;}
- if(head.dir < 0) {head.dir += 256;}
- dirlog.pop();
- dirlog.unshift(head.dir);
- //体節の処理
- for(var i:int = 1; i < parts.length; i++)
- {
- var segment:Segment = parts[i];
- var front:Segment = parts[i-1];
- segment.x = front.x + MathEx.getVectorX(front.dir, -front.size);
- segment.z = front.z + MathEx.getVectorY(front.dir, -front.size)+0.1;
- segment.y = front.y;
- segment.dir = dirlog[i*3+5];
- }
- }
- /*
- public function draw(screen:BitmapData):void
- {
- var temp:Vector.<Segment> = parts.slice(); //配列のコピー
- temp.sort(function(x:Segment, y:Segment):Number {return x.z <= y.z ? 1 : -1;}); //Zソート
- for(var i:int = 0; i < temp.length; i++) {
- temp[i].draw(screen);
- }
- }
- */
- }
- class Segment
- {
- private static var frames:Vector.<Vector.<DisplayImage>>;
- private var matrix:Matrix = new Matrix();
- public static const WIDTH:int = 128;
- public static const HEIGHT:int = 160;
- public static const D:int = 400;
- private var num:int;
- public var x:Number = 0;
- public var y:Number = 0;
- public var z:Number = 0;
- public var dir:int = 0;
- public var size:int = 30;
- function Segment(bmp:BitmapData, num:int)
- {
- if(frames == null)
- {
- frames = new Vector.<Vector.<DisplayImage>>(7, true);
- for(var j:int = 0; j < frames.length; j++)
- {
- frames[j] = new Vector.<DisplayImage>(16, true);
- for(var i:int = 0; i < frames[j].length; i++)
- {
- var frame:BitmapData = new BitmapData(WIDTH, HEIGHT, true, 0);
- frame.copyPixels(bmp, new Rectangle(i * WIDTH, j * HEIGHT, WIDTH, HEIGHT), new Point(0, 0));
- frames[j][i] = new DisplayImage(frame, WIDTH/2, HEIGHT/2 + 4);
- }
- }
- }
- this.num = num;
- }
- public function draw(screen:BitmapData):void
- {
- var frame:DisplayImage = frames[num][Math.floor((dir+8) / 16+12) % 16];
- matrix.identity();
- matrix.translate(-frame.cx, -frame.cy);
- matrix.scale(D / z, D / z);
- matrix.translate((D * x / z) + Darius.WIDTH/2, (D * y / z) + Darius.HEIGHT/2);
- screen.draw(frame.bmp, matrix);
- }
- }
- class BG
- {
- private var list:Vector.<Star> = new Vector.<Star>(400, true)
- function BG()
- {
- for(var i:int = 0; i < list.length; i++) {
- list[i] = new Star();
- }
- }
- public function draw(screen:BitmapData):void
- {
- for each(var star:Star in list) {
- star.draw(screen);
- }
- }
- }
- class Star
- {
- public var x:Number;
- public var y:Number;
- public var speed:Number;
- public var color:uint;
- function Star()
- {
- x = Math.random()*Darius.WIDTH;
- shuffle();
- }
- public function shuffle():void
- {
- y = Math.random()*Darius.HEIGHT;
- speed = Math.random()+0.1;
- color = MathEx.rand_int(0, 0xC0)*0x10000 + MathEx.rand_int(0, 0xC0)*0x100 + MathEx.rand_int(0, 0xC0);
- }
- public function draw(screen:BitmapData):void
- {
- x -= speed;
- if(x < 0) {
- x = Darius.WIDTH;
- shuffle();
- }
- screen.setPixel(x, y, color);
- }
- }
- class DisplayImage
- {
- public var bmp:BitmapData;
- public var rect:Rectangle;
- public var cx:int, cy:int;
- function DisplayImage(bmp:BitmapData, cx:int, cy:int)
- {
- this.bmp = bmp;
- this.rect = bmp.rect;
- this.cx = cx;
- this.cy = cy;
- trimming();
- }
- private function trimming():void
- {
- var rect:Rectangle = bmp.getColorBoundsRect(0xFF000000, 0x00000000);
- var temp:BitmapData = new BitmapData(rect.width, rect.height, true, 0x00000000);
- cx -= rect.x;
- cy -= rect.y;
- temp.copyPixels(bmp, rect, new Point(0, 0));
- bmp = temp;
- }
- }
- class MathEx
- {
- public static function limit(min:Number, target:Number, max:Number):Number {return Math.max(min, Math.min(target, max));}
- public static function rand_int(min:int, max:int):int {return Math.floor(Math.random()*(max-min+1)+min);}
- public static function getVectorX(dir:Number, speed:Number):Number {return Math.cos(Math.PI/128*dir)*speed;}
- public static function getVectorY(dir:Number, speed:Number):Number {return Math.sin(Math.PI/128*dir)*speed;}
- public static function getBearing(dir1:Number, dir2:Number):Number
- {
- var d1:Number = normalizeAngle(dir1);
- var d2:Number = normalizeAngle(dir2);
- if(d2-128 > d1) {d1 += 256;}
- if(d2+128 < d1) {d1 -= 256;}
- return d1-d2;
- }
- public static function normalizeAngle(dir:Number):Number
- {
- if (dir < -128) {
- dir = 256 - (-dir % 256);
- }
- dir = (dir + 128) % 256 - 128;
- return dir;
- }
- }
- class Key
- {
- private static var down:Vector.<Boolean> = new Vector.<Boolean>(256, true);
- public static function setListener(target:InteractiveObject):void
- {
- target.stage.focus = target;
- target.addEventListener(KeyboardEvent.KEY_DOWN, function (event:KeyboardEvent):void {down[event.keyCode] = true;});
- target.addEventListener(KeyboardEvent.KEY_UP, function (event:KeyboardEvent):void {down[event.keyCode] = false;});
- target.addEventListener(FocusEvent.FOCUS_OUT, onFocusOut);
- }
- private static function onFocusOut(event:FocusEvent):void
- {
- event.currentTarget.stage.focus = event.currentTarget;
- //キーを押しながらフォーカスが外れると押しっぱなしになる現象の対策
- for(var i:int = 0; i < down.length; i++) {down[i] = false;}
- }
- public static function isDown(keycode:int):Boolean {
- return down[keycode];
- }
- }
notice:




