※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : HaraMakoto's 方向一定しつつ衝突判定 forked from: Yawaraka Balls [diff(96)]

FAVORITE BY
:
交通事故
FORKED

チョロチョロ走る車 forked from: 方向一定しつつ衝突判定 forked from: チョロチョロ走る車 forked from: 方向一定しつつ衝突判定 [diff(1)]

  1. // forked from HaraMakoto's チョロチョロ走る車 forked from: 方向一定しつつ衝突判定
  2. package
  3. {
  4.     import __AS3__.vec.Vector;
  5.     
  6.     import flash.display.BitmapData;
  7.     import flash.display.Loader;
  8.     import flash.display.Sprite;
  9.     import flash.events.Event;
  10.     import flash.events.TimerEvent;
  11.     import flash.geom.Matrix;
  12.     import flash.net.URLRequest;
  13.     import flash.system.Security;
  14.     import flash.utils.Timer;
  15.     
  16.     import jp.progression.commands.Func;
  17.     import jp.progression.commands.lists.SerialList;
  18.     
  19.     import net.hires.debug.Stats;
  20.     
  21.     [SWF(width="465", height="465", backgroundColor="#000000", frameRate=60)]
  22.     public class HitTest4 extends Sprite
  23.     {
  24.         private var elemList:Array = new Array();
  25.         private var elemNum:int = 20;
  26.         private var colManager:EasyColosionManager = new EasyColosionManager();
  27.         private var RoadList:Array = new Array();
  28.         
  29.         private var carList:Array = new Array();
  30. //        private var ImgDomain:String = "assets/";
  31.         private var ImgDomain:String = "http://swimmingbird.heteml.jp/wonderfl/assets/car/"
  32.         private var ROT_STEPS:int = 15;
  33.         public var Front:Vector.<BitmapData> = new Vector.<BitmapData>(ROT_STEPS, true);
  34.         public var Back:Vector.<BitmapData> = new Vector.<BitmapData>(ROT_STEPS, true);
  35.         public var Right:Vector.<BitmapData> = new Vector.<BitmapData>(ROT_STEPS, true);
  36.         public var Left:Vector.<BitmapData> = new Vector.<BitmapData>(ROT_STEPS, true);
  37.         
  38.         public function HitTest4()
  39.         {
  40.             super();
  41.             Security.loadPolicyFile("http://swimmingbird.heteml.jp/crossdomain.xml");
  42.             //addChild(new Stats());
  43.             
  44.             loadCharacters(carList,init);
  45.             //init();
  46.             
  47.         }
  48.         
  49.         private function loadCharacters(ImgArr:Array,compFunc:Function):void {
  50.             var i:int;
  51.             var carNum:int = 45;
  52.             var s:SerialList = new SerialList();
  53.             for(i=1; i<carNum+1; i++) {
  54.                 var loader:Loader = new Loader();
  55.                 var sp:Sprite = new Sprite();
  56.                 sp.addChild(loader);
  57.                 ImgArr.push(sp);
  58.                    s.addCommand(
  59.                     new Func(loader.load,[new URLRequest(ImgDomain+"car"+i+".png")],loader.contentLoaderInfo,Event.COMPLETE)
  60.                 );
  61.             }
  62.             s.addCommand(new Func(constructCars));
  63.             s.addCommand(new Func(compFunc));
  64.             s.execute();
  65.         }
  66.         
  67.         private function constructCars():void {
  68.             var matrix:Matrix = new Matrix();
  69.             matrix.scale(-1,1);
  70.             matrix.translate(50,0);
  71.             var i:int = ROT_STEPS;
  72.             while (i--)
  73.             {
  74.                 Front[i] = new BitmapData(5050true, 0x0);
  75.                 Front[i].draw(carList[i+15]);
  76.                 Back[i] = new BitmapData(5050true, 0x0);
  77.                 Back[i].draw(carList[i+30]);
  78.                 Right[i] = new BitmapData(5050true, 0x0);
  79.                 Right[i].draw(carList[i]);
  80.                 Left[i] = new BitmapData(5050true, 0x0);
  81.                 Left[i].draw(carList[i],matrix);
  82.             }
  83.         }
  84.         
  85.         private function init():void {
  86.             //道路一覧
  87.             RoadList = [
  88.                 new RoadUnit(80,445,"y",-1),new RoadUnit(140,20,"y",1),
  89.                 new RoadUnit(200,445,"y",-1),new RoadUnit(240,20,"y",1),
  90.                 new RoadUnit(340,445,"y",-1),new RoadUnit(400,20,"y",1),
  91.                 new RoadUnit(445,90,"x",-1),new RoadUnit(20,140,"x",1),
  92.                 new RoadUnit(445,180,"x",-1),new RoadUnit(20,210,"x",1),
  93.                 new RoadUnit(445,280,"x",-1),new RoadUnit(20,340,"x",1)
  94.             ]
  95.             var i:int;
  96.             for(i=0; i<elemNum; i++) {
  97.                 var elem:Elemet = new Elemet(this);
  98.                 addChild(elem);
  99.                 colManager.addElement(elem); //衝突マネージャ
  100.                 elemList.push(elem);
  101.                 var ru:RoadUnit = RoadList[int(RoadList.length*Math.random())];
  102.                 elem.px = ru.x;
  103.                 elem.py = ru.y;
  104.                 if(ru.vecType=="x") {
  105.                     if(ru.posinega==1) {
  106.                         elem.px += 100*Math.random();
  107.                     } else {
  108.                         elem.px -= 100*Math.random();
  109.                     }
  110.                 } else {
  111.                     elem.py += 100*Math.random();                    
  112.                 }
  113.                 elem.init((ru.vecType=="x"),(ru.vecType=="y"),0.01*ru.posinega, 0.01*ru.posinega,ru.x, ru.y);
  114.             }
  115. //            var too:TooSenBoo = new TooSenBoo();
  116. //            addChild(too);
  117. //            colManager.addElement(too);
  118. //            elemList.push(too);
  119. //            elemNum++;
  120.             
  121.             this.graphics.clear();
  122.             for(i=0; i<RoadList.length; i++) {
  123.                 var rr:RoadUnit = RoadList[i];
  124.                 this.graphics.lineStyle(1,0x333333);
  125.                 this.graphics.moveTo(rr.x,rr.y);
  126.                 var goalNum:Number = 465;
  127.                 if(rr.posinega==-1) goalNum = 0;
  128.                 if(rr.vecType=="x") {
  129.                     this.graphics.lineTo(goalNum, rr.y);
  130.                 } else {
  131.                     this.graphics.lineTo(rr.x, goalNum);                    
  132.                 }
  133.             }
  134.             addEventListener(Event.ENTER_FRAME, handleEnterFrame);
  135.         }
  136.         
  137.         
  138.         
  139.         private function handleEnterFrame(event:Event):void {
  140.             for (var t:int = 0; t < 6; t++) {
  141.                 var i:int;
  142.                 for(i=0; i<elemNum; i++) {
  143.                     elemList[i].update();
  144.                 }
  145.                 colManager.checkColision();
  146.             }
  147.             for(i=0; i<elemNum; i++) {
  148.                 elemList[i].render();
  149.             }
  150.         }
  151.         
  152.     }
  153. }
  154.     import flash.events.EventDispatcher;
  155.     import flash.display.Sprite;
  156.     import flash.utils.Timer;
  157.     import flash.events.TimerEvent;
  158.     import flash.geom.Point;
  159.     import caurina.transitions.Tweener;
  160.     import caurina.transitions.Equations;
  161.     import flash.display.BitmapData;
  162.     import flash.display.Bitmap;
  163.     
  164. class EasyColosionManager extends EventDispatcher {
  165.     private var elemList:Array = new Array();
  166.     private var elemlen:int = 0;
  167.     private var spring:Number = 0.2;
  168.     private var bounce:Number = -0.5;
  169.     private var gravity:Number = 0.1;
  170.     public function EasyColosionManager() {
  171.         
  172.     }
  173.     
  174.     public function addElement(elem:Elemet):void {
  175.         elemList.push(elem);
  176.         elemlen = elemList.length;
  177.     }
  178.     
  179.     public function checkColision():void {
  180.         var i:int;
  181.         for(i=0; i<elemlen-1; i++) {
  182.             var elem0:Elemet = elemList[i];
  183.             for(var j:int=i+1; j<elemlen; j++) {
  184.                 var elem1:Elemet = elemList[j];
  185.                 var dx:Number = elem1.x - elem0.x;
  186.                 var dy:Number = elem1.y - elem0.y;  
  187.                 var dist:Number = culcDistBetElems(elem0, elem1);
  188.                 var minDist:Number = elem0.radious + elem1.radious;
  189.                 elem0.hitTest(elem1);
  190.             }
  191.         }
  192.         
  193.     }
  194.     
  195.     //2者間の距離を返す
  196.     private function culcDistBetElems(mc1:Sprite, mc2:Sprite):Number {
  197.         var pt1:Point = new Point(mc1.x, mc2.x);
  198.         var pt2:Point = new Point(mc2.x, mc2.y);
  199.         var dist:Number = Point.distance(pt1, pt2);
  200.         return dist;
  201.     }
  202.     
  203. }
  204. class Elemet extends Sprite {
  205.     public var px:Number = 0;
  206.     public var py:Number = 0;
  207.     public var vx:Number = 0;
  208.     public var vy:Number = 0;
  209.     public var maxX:Number = 465;
  210.     public var maxY:Number = 465;
  211.     public var started:Boolean = false;
  212.     public var radious:Number = 25;
  213.     private var spring:Number = 0.1;
  214.     private var bounce:Number = -0.5;
  215.     
  216.     private var cx:Number = 0;
  217.     private var cy:Number = 0;
  218.     private var priority:int = 0;
  219.     
  220.     private var isXAddition:Boolean = false;
  221.     private var isYAddition:Boolean = true;
  222.     private var additionalVx:Number = 0.1;
  223.     private var additionalVy:Number = 0.01;
  224.     private var fixX:Number = 200;
  225.     private var fixY:Number = 200;
  226.     
  227.     private var startPt:Point = new Point(0,0);
  228.     private var startVx:Number, startVy:Number;
  229.     
  230.     private var bmp:Bitmap = new Bitmap();
  231.     private var myparent:HitTest4;
  232.     private var counter:int = 0;
  233.     
  234.     private var timer:Timer = new Timer(1000);
  235.     public function Elemet(pare:HitTest4) {
  236.         myparent = pare;
  237.         radious = 18;
  238.         makeBody();
  239.     }
  240.     
  241.     private function makeBody():void {
  242.         this.graphics.beginFill(0,0);
  243.         this.graphics.drawCircle(0,0,radious);
  244.         this.graphics.endFill();
  245.         addChild(bmp);
  246.         bmp.x = bmp.y = -25;
  247.     }
  248.     
  249.     public function attacked():void {
  250.         Tweener.addTween(this, {alpha:0, time:0.2, transition:Equations.easeOutInBounce});
  251.         Tweener.addTween(this, {alpha:1, time:0.2, delay:0.2, transition:Equations.easeOutInBounce});
  252.     }
  253.     
  254.     public function contact(contactX:Number, contactY:Number, _priority:int, force:Number):void {
  255.         var tx:Number = contactX - px;
  256.         var ty:Number = contactY - py;
  257.         
  258.         var angle:Number = Math.atan2(ty, tx);
  259.         var length:Number = Math.sqrt(tx*tx+ty*ty);
  260.         
  261.         vx -= (1-length/radious)*0.5*Math.cos(angle);
  262.         vy -= (1-length/radious)*0.5*Math.sin(angle);
  263.         
  264.         if(this.priority < _priority) {
  265.             this.priority = _priority;
  266.             cx = tx;
  267.             cy = ty;
  268.         }
  269.     }
  270.     public function hitTest(elm:Elemet):void {
  271.         var dx:Number = elm.px - px;
  272.         var dy:Number = elm.py - py;
  273.         var distanceSquared:Number = dx*dx+dy*dy;
  274.         var contactDistance:Number = radious + elm.radious;
  275.         if(distanceSquared < contactDistance*contactDistance) {
  276.             var tx:Number = linearTransform(radious, 0, contactDistance, px, elm.px);
  277.             var ty:Number = linearTransform(radious, 0, contactDistance, py, elm.py);
  278.             contact(tx, ty, 20.5);
  279.             elm.contact(tx, ty, 20.5);
  280.         }
  281.     }
  282.     private function linearTransform(n:Number, s0:Number, s1:Number, d0:Number, d1:Number):Number {
  283.         return ( d0+(n-s0)*(d1-d0) / (s1-s0) );
  284.     }
  285.     
  286.     
  287.     public function update():void {
  288.         cx = 0;
  289.         cy = 0;
  290.         priority = 0;
  291.     
  292.         px += vx;
  293.         py += vy;
  294.         
  295.         if(px-radious<0) {
  296.             setStartPosition();
  297.         }
  298.         if(px+radious>465) {
  299.             setStartPosition();
  300.         }
  301.         if(py-radious<0) {
  302.             setStartPosition();
  303.         }
  304.         
  305.         //端までいったら戻る
  306.         if(isContactWall())
  307.             setStartPosition();
  308.             
  309.         mainAdditionalVec();
  310.         vy *= 0.9796;
  311.         vx *= 0.9796;
  312.     }
  313.     public function init(xAnable:Boolean=true, yAnable:Boolean=false, _vx:Number=0.001, _vy:Number=0.001, _x:Number=200, _y:Number=200):void {
  314.         startPt.x = _x; startPt.y = _y;
  315.         startVx = _vx; startVy = _vy;
  316.         changeAction(xAnable,yAnable,_vx,_vy,_x,_y);
  317.     }
  318.     private function setStartPosition():void {
  319.         px = startPt.x;
  320.         py = startPt.y;
  321.         vx = startVx;
  322.         vy = startVy;
  323.     }
  324.     public function changeAction(xAnable:Boolean=true, yAnable:Boolean=false, _vx:Number=0.001, _vy:Number=0.001, _x:Number=200, _y:Number=200):void {
  325.         isXAddition = xAnable;
  326.         isYAddition = yAnable;
  327.         additionalVx = _vx;
  328.         additionalVy = _vy;
  329.         fixX = _x;
  330.         fixY = _y;
  331.     }
  332.     private function isContactWall():Boolean {
  333.         var truth:Boolean = false;
  334.         if(isXAddition){
  335.             if(px-radious>maxX)
  336.                 truth = true;
  337.         } else if(isYAddition) {
  338.             if(py-radious>maxY)
  339.                 truth = true;
  340.         }
  341.         return truth;
  342.     }
  343.     private function mainAdditionalVec():void {
  344.         if(isXAddition) {
  345.             vx+=additionalVx;
  346.             py = fixY;
  347.         }
  348.         if(isYAddition) {
  349.             vy+=additionalVy;
  350.             px = fixX;
  351.         }
  352.         
  353.         
  354.     }
  355.     
  356.     public function render():void {
  357.         if(isYAddition) {
  358.             if(vy>0) {
  359.                 bmp.bitmapData = myparent.Front[counter%15];
  360.             } else {
  361.                 bmp.bitmapData = myparent.Back[counter%15];
  362.             }
  363.         } else {
  364.             if(vx>0) {
  365.                 bmp.bitmapData = myparent.Right[counter%15];
  366.             } else {
  367.                 bmp.bitmapData = myparent.Left[counter%15];
  368.             }
  369.         }
  370.         this.x = px;
  371.         this.y = py;
  372.         counter++;
  373.     }
  374. }
  375. class TooSenBoo extends Elemet {
  376.     public function TooSenBoo(pare:HitTest4) {
  377.         super(pare);
  378.     }
  379.     public override function update():void {
  380.         px = 400;
  381.         py = 200;
  382.     }
  383. }
  384. class RoadUnit {
  385.     public var x:Number;
  386.     public var y:Number;
  387.     public var vecType:String = "x";
  388.     public var posinega:int = 1;
  389.     public function RoadUnit(_x:Number=0,_y:Number=0, _vec:String="x", _pn:int=1 ) {
  390.         x = _x;
  391.         y = _y;
  392.         vecType = _vec;
  393.         posinega = _pn;
  394.     } 
  395. }
noswf

チョロチョロ走る車 forked from: 方向一定しつつ衝突判定 車にもローディングを使う。 forked from: チョロチョロ走る車 [diff(43)]

  1. // forked from HaraMakoto's チョロチョロ走る車 forked from: 方向一定しつつ衝突判定
  2. package
  3. {
  4.     import __AS3__.vec.Vector;
  5.     import flash.display.BitmapData;
  6.     import flash.display.Loader;
  7.     import flash.display.Sprite;
  8.     import flash.events.Event;
  9.     import flash.events.TimerEvent;
  10.     import flash.geom.Matrix;
  11.     import flash.net.URLRequest;
  12.     import flash.system.Security;
  13.     import flash.utils.Timer;
  14.         import net.wonderfl.utils.WonderflSWFUrl;
  15.     
  16.     import jp.progression.commands.Func;
  17.     import jp.progression.commands.lists.SerialList;
  18.     
  19.     import net.hires.debug.Stats;
  20.     
  21.     [SWF(width="465", height="465", backgroundColor="#000000", frameRate=60)]
  22.     public class HitTest4 extends Sprite
  23.     {
  24.         private var loadView:Object;
  25.                 
  26.                 private var carField:Sprite = new Sprite();
  27.                 
  28.                 private var elemList:Array = new Array();
  29.         private var elemNum:int = 20;
  30.         private var colManager:EasyColosionManager = new EasyColosionManager();
  31.         private var RoadList:Array = new Array();
  32.         
  33.         private var carList:Array = new Array();
  34. //        private var ImgDomain:String = "assets/";
  35.         private var ImgDomain:String = "http://swimmingbird.heteml.jp/wonderfl/assets/car/"
  36.         private var ROT_STEPS:int = 15;
  37.         public var Front:Vector.<BitmapData> = new Vector.<BitmapData>(ROT_STEPS, true);
  38.         public var Back:Vector.<BitmapData> = new Vector.<BitmapData>(ROT_STEPS, true);
  39.         public var Right:Vector.<BitmapData> = new Vector.<BitmapData>(ROT_STEPS, true);
  40.         public var Left:Vector.<BitmapData> = new Vector.<BitmapData>(ROT_STEPS, true);
  41.         
  42.         public function HitTest4()
  43.         {
  44.             super();
  45.             Security.loadPolicyFile("http://swimmingbird.heteml.jp/crossdomain.xml");
  46.             //addChild(new Stats());
  47.             addChild(carField);
  48.                         loadLoadingView(startFunc);
  49.             
  50.             //init();
  51.         }
  52.                 private function startFunc():void {
  53.                     loadView.loadStart();
  54.                     loadCharacters(carList,init);
  55.                 }        
  56.         private function loadCharacters(ImgArr:Array,compFunc:Function):void {
  57.             var i:int;
  58.             var carNum:int = 45;
  59.             var s:SerialList = new SerialList();
  60.             for(i=1; i<carNum+1; i++) {
  61.                 var loader:Loader = new Loader();
  62.                 var sp:Sprite = new Sprite();
  63.                 sp.addChild(loader);
  64.                 ImgArr.push(sp);
  65.                    s.addCommand(
  66.                     new Func(loader.load,[new URLRequest(ImgDomain+"car"+i+".png")],loader.contentLoaderInfo,Event.COMPLETE),
  67.                                 new Func(loadView.attachLoadValue,[i/carNum])
  68.                 );
  69.             }
  70.             s.addCommand(new Func(constructCars));
  71.             s.addCommand(new Func(compFunc));
  72.                 s.addCommand(new Func(loadView.loadComplete));
  73.             s.execute();
  74.         }
  75.         
  76.         private function constructCars():void {
  77.             var matrix:Matrix = new Matrix();
  78.             matrix.scale(-1,1);
  79.             matrix.translate(50,0);
  80.             var i:int = ROT_STEPS;
  81.             while (i--)
  82.             {
  83.                 Front[i] = new BitmapData(5050true, 0x0);
  84.                 Front[i].draw(carList[i+15]);
  85.                 Back[i] = new BitmapData(5050true, 0x0);
  86.                 Back[i].draw(carList[i+30]);
  87.                 Right[i] = new BitmapData(5050true, 0x0);
  88.                 Right[i].draw(carList[i]);
  89.                 Left[i] = new BitmapData(5050true, 0x0);
  90.                 Left[i].draw(carList[i],matrix);
  91.             }
  92.         }
  93.         
  94.         private function init():void {
  95.             //道路一覧
  96.             RoadList = [
  97.                 new RoadUnit(80,445,"y",-1),new RoadUnit(140,20,"y",1),
  98.                 new RoadUnit(200,445,"y",-1),new RoadUnit(240,20,"y",1),
  99.                 new RoadUnit(340,445,"y",-1),new RoadUnit(400,20,"y",1),
  100.                 new RoadUnit(445,90,"x",-1),new RoadUnit(20,140,"x",1),
  101.                 new RoadUnit(445,180,"x",-1),new RoadUnit(20,210,"x",1),
  102.                 new RoadUnit(445,280,"x",-1),new RoadUnit(20,340,"x",1)
  103.             ]
  104.             var i:int;
  105.             for(i=0; i<elemNum; i++) {
  106.                 var elem:Elemet = new Elemet(this);
  107.                 carField.addChild(elem);
  108.                                 colManager.addElement(elem); //衝突マネージャ
  109.                 elemList.push(elem);
  110.                 var ru:RoadUnit = RoadList[int(RoadList.length*Math.random())];
  111.                 elem.px = ru.x;
  112.                 elem.py = ru.y;
  113.                 if(ru.vecType=="x") {
  114.                     if(ru.posinega==1) {
  115.                         elem.px += 100*Math.random();
  116.                     } else {
  117.                         elem.px -= 100*Math.random();
  118.                     }
  119.                 } else {
  120.                     elem.py += 100*Math.random();                    
  121.                 }
  122.                 elem.init((ru.vecType=="x"),(ru.vecType=="y"),0.01*ru.posinega, 0.01*ru.posinega,ru.x, ru.y);
  123.             }
  124. //            var too:TooSenBoo = new TooSenBoo();
  125. //            addChild(too);
  126. //            colManager.addElement(too);
  127. //            elemList.push(too);
  128. //            elemNum++;
  129.             
  130.             this.graphics.clear();
  131.             for(i=0; i<RoadList.length; i++) {
  132.                 var rr:RoadUnit = RoadList[i];
  133.                 this.graphics.lineStyle(1,0x333333);
  134.                 this.graphics.moveTo(rr.x,rr.y);
  135.                 var goalNum:Number = 465;
  136.                 if(rr.posinega==-1) goalNum = 0;
  137.                 if(rr.vecType=="x") {
  138.                     this.graphics.lineTo(goalNum, rr.y);
  139.                 } else {
  140.                     this.graphics.lineTo(rr.x, goalNum);                    
  141.                 }
  142.             }
  143.             addEventListener(Event.ENTER_FRAME, handleEnterFrame);
  144.                         
  145.         }
  146.         
  147.         
  148.         
  149.         private function handleEnterFrame(event:Event):void {
  150.             for (var t:int = 0; t < 6; t++) {
  151.                 var i:int;
  152.                 for(i=0; i<elemNum; i++) {
  153.                     elemList[i].update();
  154.                 }
  155.                 colManager.checkColision();
  156.             }
  157.             for(i=0; i<elemNum; i++) {
  158.                 elemList[i].render();
  159.             }
  160.         }
  161.  //--------------------------------------------------------------------------------//
  162.  // ローディング表示呼び出し
  163.  //--------------------------------------------------------------------------------//       
  164.              private function loadLoadingView(_f:Function):void {
  165.                  var CODE_PAGE:String = "http://wonderfl.net/code/fec7bdea47c77f160e52cd2c448bb49bb209ea92";
  166.                  var path:String = WonderflSWFUrl.getURLFromPageURL(CODE_PAGE);
  167.                  var ldr:Loader = new Loader();
  168.                  addChild(ldr);
  169.                  var s:SerialList = new SerialList();
  170.                  s.addCommand(
  171.                      new Func(ldr.load, [new URLRequest(path) ],ldr.contentLoaderInfo, Event.COMPLETE),
  172.                      function():void{loadView = ldr.contentLoaderInfo.content; },
  173.                      new Func(_f)
  174.                  );
  175.                  s.execute();
  176.               }
  177.         
  178.     }
  179. }
  180.     import flash.events.EventDispatcher;
  181.     import flash.display.Sprite;
  182.     import flash.utils.Timer;
  183.     import flash.events.TimerEvent;
  184.     import flash.geom.Point;
  185.     import caurina.transitions.Tweener;
  186.     import caurina.transitions.Equations;
  187.     import flash.display.BitmapData;
  188.     import flash.display.Bitmap;
  189.     
  190. class EasyColosionManager extends EventDispatcher {
  191.     private var elemList:Array = new Array();
  192.     private var elemlen:int = 0;
  193.     private var spring:Number = 0.2;
  194.     private var bounce:Number = -0.5;
  195.     private var gravity:Number = 0.1;
  196.     public function EasyColosionManager() {
  197.         
  198.     }
  199.     
  200.     public function addElement(elem:Elemet):void {
  201.         elemList.push(elem);
  202.         elemlen = elemList.length;
  203.     }
  204.     
  205.     public function checkColision():void {
  206.         var i:int;
  207.         for(i=0; i<elemlen-1; i++) {
  208.             var elem0:Elemet = elemList[i];
  209.             for(var j:int=i+1; j<elemlen; j++) {
  210.                 var elem1:Elemet = elemList[j];
  211.                 var dx:Number = elem1.x - elem0.x;
  212.                 var dy:Number = elem1.y - elem0.y;  
  213.                 var dist:Number = culcDistBetElems(elem0, elem1);
  214.                 var minDist:Number = elem0.radious + elem1.radious;
  215.                 elem0.hitTest(elem1);
  216.             }
  217.         }
  218.         
  219.     }
  220.     
  221.     //2者間の距離を返す
  222.     private function culcDistBetElems(mc1:Sprite, mc2:Sprite):Number {
  223.         var pt1:Point = new Point(mc1.x, mc2.x);
  224.         var pt2:Point = new Point(mc2.x, mc2.y);
  225.         var dist:Number = Point.distance(pt1, pt2);
  226.         return dist;
  227.     }
  228.     
  229. }
  230. class Elemet extends Sprite {
  231.     public var px:Number = 0;
  232.     public var py:Number = 0;
  233.     public var vx:Number = 0;
  234.     public var vy:Number = 0;
  235.     public var maxX:Number = 465;
  236.     public var maxY:Number = 465;
  237.     public var started:Boolean = false;
  238.     public var radious:Number = 25;
  239.     private var spring:Number = 0.1;
  240.     private var bounce:Number = -0.5;
  241.     
  242.     private var cx:Number = 0;
  243.     private var cy:Number = 0;
  244.     private var priority:int = 0;
  245.     
  246.     private var isXAddition:Boolean = false;
  247.     private var isYAddition:Boolean = true;
  248.     private var additionalVx:Number = 0.1;
  249.     private var additionalVy:Number = 0.01;
  250.     private var fixX:Number = 200;
  251.     private var fixY:Number = 200;
  252.     
  253.     private var startPt:Point = new Point(0,0);
  254.     private var startVx:Number, startVy:Number;
  255.     
  256.     private var bmp:Bitmap = new Bitmap();
  257.     private var myparent:HitTest4;
  258.     private var counter:int = 0;
  259.     
  260.     private var timer:Timer = new Timer(1000);
  261.     public function Elemet(pare:HitTest4) {
  262.         myparent = pare;
  263.         radious = 18;
  264.         makeBody();
  265.     }
  266.     
  267.     private function makeBody():void {
  268.         this.graphics.beginFill(0,0);
  269.         this.graphics.drawCircle(0,0,radious);
  270.         this.graphics.endFill();
  271.         addChild(bmp);
  272.         bmp.x = bmp.y = -25;
  273.     }
  274.     
  275.     public function attacked():void {
  276.         Tweener.addTween(this, {alpha:0, time:0.2, transition:Equations.easeOutInBounce});
  277.         Tweener.addTween(this, {alpha:1, time:0.2, delay:0.2, transition:Equations.easeOutInBounce});
  278.     }
  279.     
  280.     public function contact(contactX:Number, contactY:Number, _priority:int, force:Number):void {
  281.         var tx:Number = contactX - px;
  282.         var ty:Number = contactY - py;
  283.         
  284.         var angle:Number = Math.atan2(ty, tx);
  285.         var length:Number = Math.sqrt(tx*tx+ty*ty);
  286.         
  287.         vx -= (1-length/radious)*0.5*Math.cos(angle);
  288.         vy -= (1-length/radious)*0.5*Math.sin(angle);
  289.         
  290.         if(this.priority < _priority) {
  291.             this.priority = _priority;
  292.             cx = tx;
  293.             cy = ty;
  294.         }
  295.     }
  296.     public function hitTest(elm:Elemet):void {
  297.         var dx:Number = elm.px - px;
  298.         var dy:Number = elm.py - py;
  299.         var distanceSquared:Number = dx*dx+dy*dy;
  300.         var contactDistance:Number = radious + elm.radious;
  301.         if(distanceSquared < contactDistance*contactDistance) {
  302.             var tx:Number = linearTransform(radious, 0, contactDistance, px, elm.px);
  303.             var ty:Number = linearTransform(radious, 0, contactDistance, py, elm.py);
  304.             contact(tx, ty, 20.5);
  305.             elm.contact(tx, ty, 20.5);
  306.         }
  307.     }
  308.     private function linearTransform(n:Number, s0:Number, s1:Number, d0:Number, d1:Number):Number {
  309.         return ( d0+(n-s0)*(d1-d0) / (s1-s0) );
  310.     }
  311.     
  312.     
  313.     public function update():void {
  314.         cx = 0;
  315.         cy = 0;
  316.         priority = 0;
  317.     
  318.         px += vx;
  319.         py += vy;
  320.         
  321.         if(px-radious<0) {
  322.             setStartPosition();
  323.         }
  324.         if(px+radious>465) {
  325.             setStartPosition();
  326.         }
  327.         if(py-radious<0) {
  328.             setStartPosition();
  329.         }
  330.         
  331.         //端までいったら戻る
  332.         if(isContactWall())
  333.             setStartPosition();
  334.             
  335.         mainAdditionalVec();
  336.         vy *= 0.9796;
  337.         vx *= 0.9796;
  338.     }
  339.     public function init(xAnable:Boolean=true, yAnable:Boolean=false, _vx:Number=0.001, _vy:Number=0.001, _x:Number=200, _y:Number=200):void {
  340.         startPt.x = _x; startPt.y = _y;
  341.         startVx = _vx; startVy = _vy;
  342.         changeAction(xAnable,yAnable,_vx,_vy,_x,_y);
  343.     }
  344.     private function setStartPosition():void {
  345.         px = startPt.x;
  346.         py = startPt.y;
  347.         vx = startVx;
  348.         vy = startVy;
  349.     }
  350.     public function changeAction(xAnable:Boolean=true, yAnable:Boolean=false, _vx:Number=0.001, _vy:Number=0.001, _x:Number=200, _y:Number=200):void {
  351.         isXAddition = xAnable;
  352.         isYAddition = yAnable;
  353.         additionalVx = _vx;
  354.         additionalVy = _vy;
  355.         fixX = _x;
  356.         fixY = _y;
  357.     }
  358.     private function isContactWall():Boolean {
  359.         var truth:Boolean = false;
  360.         if(isXAddition){
  361.             if(px-radious>maxX)
  362.                 truth = true;
  363.         } else if(isYAddition) {
  364.             if(py-radious>maxY)
  365.                 truth = true;
  366.         }
  367.         return truth;
  368.     }
  369.     private function mainAdditionalVec():void {
  370.         if(isXAddition) {
  371.             vx+=additionalVx;
  372.             py = fixY;
  373.         }
  374.         if(isYAddition) {
  375.             vy+=additionalVy;
  376.             px = fixX;
  377.         }
  378.         
  379.         
  380.     }
  381.     
  382.     public function render():void {
  383.         if(isYAddition) {
  384.             if(vy>0) {
  385.                 bmp.bitmapData = myparent.Front[counter%15];
  386.             } else {
  387.                 bmp.bitmapData = myparent.Back[counter%15];
  388.             }
  389.         } else {
  390.             if(vx>0) {
  391.                 bmp.bitmapData = myparent.Right[counter%15];
  392.             } else {
  393.                 bmp.bitmapData = myparent.Left[counter%15];
  394.             }
  395.         }
  396.         this.x = px;
  397.         this.y = py;
  398.         counter++;
  399.     }
  400. }
  401. class TooSenBoo extends Elemet {
  402.     public function TooSenBoo(pare:HitTest4) {
  403.         super(pare);
  404.     }
  405.     public override function update():void {
  406.         px = 400;
  407.         py = 200;
  408.     }
  409. }
  410. class RoadUnit {
  411.     public var x:Number;
  412.     public var y:Number;
  413.     public var vecType:String = "x";
  414.     public var posinega:int = 1;
  415.     public function RoadUnit(_x:Number=0,_y:Number=0, _vec:String="x", _pn:int=1 ) {
  416.         x = _x;
  417.         y = _y;
  418.         vecType = _vec;
  419.         posinega = _pn;
  420.     } 
  421. }
noswf
Get Adobe Flash Player