package { import flash.display.Sprite; import flash.events.Event; import flash.geom.*; import flash.display.DisplayObjectContainer; [SWF(backgroundColor="0x000000", width="800", height="600", frameRate="30")] public class FishesSwim extends Sprite { public var fishes:Vector. = new Vector.(); public function FishesSwim() { init(); } private function init():void { for(var i:int = 0; i < 50; i++){ var fish:FishSwim = new FishSwim(Math.random()*0xFFFFFF, new Vector3D(Math.random()*2-1,Math.random()*2-1,Math.random()*2-1) /*velocity*/); fish.x= Math.random()*stage.stageWidth; fish.y= Math.random()*stage.stageHeight; fish.z= Math.random()*50; addChild(fish); fishes.push(fish); } addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(event:Event):void { (root as Sprite).graphics.clear(); zSort(fishes); fishes.forEach(function(fish:FishSwim,i:int,a:Vector.):void { //move fish.x += fish.velocity.x; fish.y += fish.velocity.y; fish.z += fish.velocity.z; fish.render(); }); } private function zSort(sprites:Vector.):void { sprites = sprites.sort(function(a:FishSwim, b:FishSwim):Number { return b.z-a.z; }); } } } // Copyright (c) 2008 David Wilhelm // MIT license: http://www.opensource.org/licenses/mit-license.php