[swf:/wp-content/uploads/2010/11/Blood1.swf 550 400]
Download: Blood.fla
import flash.geom.ColorTransform; var arrBlood:Array = []; function createVers():void { var b = new Blood(); b.speedX = 0; b.speedY = 0; b.coefCollision = 50; b.coefRotation = 30; var size:Number = Math.random(); b.scaleX = size * .5 + .5; b.scaleY = size * .5 + .5; b.scale = b.scaleX; b.ray = b.width / 2.5; b.acc = true; b.acceleration = 1 + size * 1; b.coefDecceleration = 0.92 + size * 0.03; b.velocityMax = 4 + size * 4; b.velocity = 0; b.x = 400 * Math.random(); b.y = 550 * Math.random(); b.angle = 0; var tint:Number = Math.random() * .7 + .3; b.transform.colorTransform = new ColorTransform(tint,tint,tint); cont.addChild(b); b.addEventListener(Event.ENTER_FRAME, versEnterFrame); arrBlood.push(b); } function getResAngleRad(angle1:Number,angle2:Number):Number { var a:Number = angle1 - angle2; if (a > Math.PI) { a = a - Math.PI * 2; } else if (a<(-Math.PI)) { a = a + Math.PI * 2; } return a; } function versEnterFrame(pEvt:Event):void { var b:MovieClip = pEvt.currentTarget as MovieClip; var angle:Number; if (b.acc) {//trace("acc") b.velocity += b.acceleration; //trace(b.velocity) if (b.velocity > b.velocityMax) { b.acc = false; } else { b.velocity *= b.coefDecceleration; if (b.velocity < 0.5) { b.acc = true; if (stage.mouseX > 550 || stage.mouseY > 400 || stage.mouseX < 0 || stage.mouseY < 0) { b.angle = Math.atan2(400/2-b.y,550/2-b.x); } else { b.angle = Math.atan2(stage.mouseY - b.y,stage.mouseX - b.x); } } } b.scaleX = b.scale + (b.scale * 0.4) * b.velocity/b.velocityMax; b.scaleY = b.scale - (b.scale * 0.4) * b.velocity/b.velocityMax; var angleSpeed:Number = Math.atan2(b.speedY,b.speedX); var angleRes:Number = getResAngleRad(angleSpeed,b.angle); //trace(angleRes) if (Math.abs(angleRes) < 0.1) {//trace("=") } else if (angleRes >0) { angleSpeed -= Math.PI / b.coefRotation * b.velocity / b.velocityMax; //trace("+") } else if (angleRes <0) { angleSpeed += Math.PI / b.coefRotation * b.velocity / b.velocityMax; }//trace("-") b.speedX = Math.cos(angleSpeed) * b.velocity; b.speedY = Math.sin(angleSpeed) * b.velocity; b.rotation = angleSpeed * 180 / Math.PI; b.x += b.speedX; b.y += b.speedY; for (var i:String in arrBlood) { var mc:MovieClip = arrBlood[i]; var dist:Number = getDistance(b,mc); if (dist < b.ray+mc.ray) { //trace("col") var a:Number = Math.atan2(b.y - mc.y,b.x - mc.x); b.x += Math.cos(a) * dist / b.coefCollision; b.y += Math.sin(a) * dist / b.coefCollision; mc.x -= Math.cos(a) * dist / b.coefCollision; mc.y -= Math.sin(a) * dist / b.coefCollision; } } } function getDistance(a:MovieClip,b:MovieClip):Number { return Math.sqrt(Math.pow(a.x - b.x,2) + Math.pow(a.y - b.y,2)); } for (var i:int = 0; i<100; i++) { createVers(); }