View Single Post
Old 03-13-2010, 07:49 PM   #9
pradvan
Senior Member
 
Join Date: Sep 2005
Location: NYC
Posts: 250
Default

I think i figured out how to calculate mass/force based on size. Also changed the center point of all movieclips.

Going to optimize this later and post it:

ActionScript Code:
package {     import flash.display.BitmapData;     import flash.display.Sprite;     import flash.display.MovieClip;     import flash.events.Event;     import flash.events.MouseEvent;         public class Reclaimer3 extends Sprite     {         private var particlesCurrent:Number = 0;         private var particlesTotal:Number = 50;         private var particleSpeed:Number = 10;         private var particleFadeoutSpeed:Number = .0175;                 private var particlesArray:Array;              private var radians:Number;                 private var dx:Number;         private var dy:Number;         private var distSQ:Number;         private var dist:Number;         private var forceX:Number;         private var forceY:Number;                 public function Reclaimer3():void         {             init();         }                 private function init():void         {             radians = 180 / Math.PI;             particlesArray = [];                         addEventListener(Event.ENTER_FRAME, onEnterFrameLoop);                         thing1.addEventListener(MouseEvent.MOUSE_DOWN, onThingDown);             thing2.addEventListener(MouseEvent.MOUSE_DOWN, onThingDown);             thing3.addEventListener(MouseEvent.MOUSE_DOWN, onThingDown);                         thing1.addEventListener(MouseEvent.MOUSE_UP, onThingUp);             thing2.addEventListener(MouseEvent.MOUSE_UP, onThingUp);             thing3.addEventListener(MouseEvent.MOUSE_UP, onThingUp);                     }                 private function onThingDown(event:MouseEvent):void         {             event.currentTarget.startDrag();         }         private function onThingUp(event:MouseEvent):void         {             event.currentTarget.stopDrag();         }                 private function createParticle(target1:MovieClip, target2:MovieClip):void         {                  if(particlesTotal <= particlesCurrent)             {                 return;             }             particlesCurrent++;                         var tempParticle:Particle = new Particle();                         tempParticle.x = (target1.x - target1.width / 2) + (Math.random() * target1.width);             tempParticle.y = (target1.y - target1.height / 2) + (Math.random() * target1.height);             tempParticle.rotation = Math.random()*360;                         tempParticle.rot = Math.atan2(target1.y - target2.y, target1.x - target2.x);             tempParticle.xSpeed = Math.cos(tempParticle.rot) * radians / particleSpeed;             tempParticle.ySpeed = Math.sin(tempParticle.rot) * radians / particleSpeed;             tempParticle.mass = tempParticle.width / 2 + tempParticle.height / 2;                         particlesArray.push(tempParticle);                         addChild(tempParticle);                     }                 private function updateParticle():void         {             for (var i = 0; i < particlesArray.length; i++)             {                 var tempParticle:MovieClip = particlesArray[i];                                 tempParticle.x -= tempParticle.xSpeed;                 tempParticle.y -= tempParticle.ySpeed;                  tempParticle.alpha -= particleFadeoutSpeed;                                 dx = tempParticle.x - thing3.x;                 dy = tempParticle.y - thing3.y;                 distSQ = ((dx * dx) + (dy * dy));                                 //force = mass x acceleration                 forceX = tempParticle.mass * tempParticle.xSpeed;                 forceY = tempParticle.mass * tempParticle.ySpeed;                                 var thing3Mass:Number = (thing3.width / 2 + thing3.height / 2);                                 tempParticle.x += thing3Mass * (dx+forceX) / distSQ;                 tempParticle.y += thing3Mass * (dy+forceY) / distSQ;                                 if(tempParticle.hitTestObject(thing2))                 {                     destroyParticle(tempParticle);                 }                 else if (tempParticle.alpha <= 0)                 {                     destroyParticle(tempParticle);                 }                 else if (tempParticle.x < 0)                 {                     destroyParticle(tempParticle);                 }                 else if (tempParticle.x > stage.stageWidth)                 {                     destroyParticle(tempParticle);                 }                 else if (tempParticle.y < 0)                 {                     destroyParticle(tempParticle);                 }                 else if (tempParticle.y > stage.stageHeight)                 {                     destroyParticle(tempParticle);                 }             }         }                 private function destroyParticle(particle:MovieClip):void         {             for (var i = 0; i < particlesArray.length; i++)             {                 var tempParticle:MovieClip = particlesArray[i];                 if (tempParticle == particle)                 {                     particlesCurrent--;                     particlesArray.splice(i,1);                     removeChild(tempParticle);                 }             }         }                 private function onEnterFrameLoop(event:Event):void         {             createParticle(thing1, thing2);             updateParticle();         }             }    }
__________________
FreeActionScript.com- AS2 & AS3 Game Tutorials, Samples, Source Files & Downloads
pradvan is offline   Reply With Quote