Flash Actionscript + получить координаты x & y при столкновении - PullRequest
0 голосов
/ 16 января 2011

Я использую HitTestPoint, чтобы определить, когда два из моих mc сталкиваются, но я не хочу, чтобы они могли проходить сквозь друг друга. Кто-то предложил мне найти координаты x, y движущегося объекта при столкновении, а затем обновлять координаты mc до этого x, y каждый раз, когда происходит столкновение. Я гуглил, но вышел пустым. Ниже мой код и то, что я пытался

 private function __checkHit($evt:Event):void {
   if (this.coin_mc.hitTestObject(target)) {
     if (!hitting) {
   coinSnd.play();
     count++;
       total_count.text = String("$" + count);
     hitting = !hitting;
 }
   } else {
    hitting = false;
   }
   if (mug_bounds.hitTestPoint(coin_mc.x,coin_mc.y, false)) 
    { 
        // do our in-circle check
        if((mug_bounds.x - coin_mc.x) * 2 + (mug_bounds.y - coin_mc.y) * 2 <= (mug_bounds.width/2 + coin_mc.width/2) * 2)
        {
   **var coinX:Number = coin_mc.x;
   var coinY:Number = coin_mc.y;
                        trace(coin_mc.x);
   trace(coin_mc.y);
   coin_mc.x = coinX;
   coin_mc.y=coinY;**   
        }
 }  
else
{
    trace("Didn't Hit Mug");
}
}

}

1 Ответ

0 голосов
/ 18 января 2011

Вы почти у цели.Когда вы делаете проверку по кругу, вам нужно установить координаты coin_mc.То, какие значения вы устанавливаете, зависит от того, что вы хотите сделать, например, остановить, сбросить, исчезнуть и т. Д. Например, приведенный ниже код просто останавливает coin_mc в точке, в которой он касается:

if (mug_bounds.hitTestPoint(coin_mc.x,coin_mc.y, false)) 
{ 
    // do our in-circle check
    if((mug_bounds.x - coin_mc.x) * 2 + (mug_bounds.y - coin_mc.y) * 2 <= (mug_bounds.width/2 + coin_mc.width/2) * 2)
    {
        //first find the angle between the two centre points
        var diffX:Number =(coin_mc.x-mug_bounds.x);
        var diffY:Number =(coin_mc.y-mug_bounds.y);
        var radii:Number = mug_bounds.width/2 + coin_mc.width/2;
        var angle:Number = Math.atan2(diffX,diffY)

        // use trig to calculate the new x position so that the coin_mc isn't touching the mug
        coin_mc.x = mug_bounds.x + radii*Math.sin(angle);
        coin_mc.y = mug_bounds.y + radii*Math.cos(angle);

    }
}  else {
    trace("Didn't Hit Mug");
}
...