Пытаюсь сделать так чтобы при столкновении в онлайн игре, героя с противником оба начинали двигаться в заданном направлении. В итоге противник просто отскакивает от героя на несколько пикселей. Разумеется все это можно сделать с помощью математических функций синуса и косинуса. Но я решил пойти другим путем и сделать это без синусов и косинусов. Кто нибудь знает как сделать плавное перемещения обоих персов?
Вот сам код:
Код
import flash.events.Event;
import flash.events.KeyboardEvent;
var b1:ball1;
var b2:ball2;
var dist_x, dist_y, minDist, distance;
var midpointX, midpointY;
var up, left, right, down;
createBalls();
var accelerator = 5;
function createBalls ()
{
b1 = new ball1();
addChild(b1);
b1.x = 300;
b1.y = 100;
b1.speedx = b1.x;
b1.speedy = b1.y;
b2 = new ball2();
addChild(b2);
b2.x = 100;
b2.y = 100;
b1.addEventListener(Event.ENTER_FRAME, onEF);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
stage.addEventListener(KeyboardEvent.KEY_UP, onKU);
}
function onKD(e:KeyboardEvent)
{
if(e.keyCode==87)
{
up = true;
}
if(e.keyCode==83)
{
down = true;
}
if(e.keyCode==65)
{
left = true;
}
if(e.keyCode==68)
{
right = true;
}
}
function onKU(e:KeyboardEvent)
{
if(e.keyCode==87)
{
up = false;
}
if(e.keyCode==83)
{
down = false;
}
if(e.keyCode==65)
{
left = false;
}
if(e.keyCode==68)
{
right = false;
}
}
function onEF(e:Event)
{
var bl:ball1 = e.currentTarget as ball1;
if(up)
{
bl.speedy -= accelerator;
}
if(left)
{
bl.speedx -= accelerator;
}
if(down)
{
bl.speedy += accelerator;
}
if(right)
{
bl.speedx += accelerator;
}
dist_x = b2.x-bl.x;
dist_y = b2.y-bl.y;
minDist = (bl.width + b2.width) / 2;
distance = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
var normalX = dist_x / distance;
var normalY = dist_y / distance;
if (distance < minDist)
{
midpointX = (bl.x+b2.x)/2;
midpointY = (bl.y+b2.y)/2;
minDist = minDist - b2.width/2; //50
b2.x = (midpointX+normalX*minDist);
b2.y = (midpointY+normalY*minDist);
}
b1.x = bl.speedx;
b1.y = bl.speedy;
}