2012-02-22 2 views
0

Я пишу игру, у нее есть враги и пули. Когда пуля попадает в противника, я хочу уничтожить врага и пулю. Я использую метод hitTestPoint(), чтобы проверить, ударил ли пуля врагу. Вот код в моей игре цикле:hitTestPoint() не проверяет правильность столкновений

for each(var bullet:Bullet in this.bullets) { 
    for each(var enemy:Enemy in this.enemies) { 
     if(enemy.hitTestPoint(bullet.x, bullet.y)) { 
      trace("hit"); 
     } 
    } 
    bullet.update(); 
} 

this.bullets и this.enemies являются массивами, содержащих объекты для пуль и врагов. Вот эти два класса:

package com { 
    import flash.display.MovieClip; 
    import flash.display.Stage; 

    public class Bullet extends MovieClip { 

     private var stageRef:Stage; 
     public var speed:Number = 10; 

     public function Bullet(stage:Stage) { 
      this.stageRef = stage; 
     } 

     public function update() { 
      this.x += Math.sin((Math.PI/180) * (360 - this.rotation)) * this.speed; 
      this.y += Math.cos((Math.PI/180) * (360 - this.rotation)) * this.speed; 
     } 
    } 
} 

-

package com { 
    import flash.display.MovieClip; 
    import flash.display.Stage; 

    public class Enemy extends MovieClip { 

    public var speed:Number = 4; 
    private var stageRef:Stage; 

    public function Enemy(stage:Stage) { 
     this.stageRef = stage; 
     this.x = this.stageRef.stageWidth/3; 
     this.y = this.stageRef.stageHeight/2; 
    } 

    public function update() { 

    } 
} 

}

Проблема заключается в том, hitTestPoint только возвращает истину, если оба х и у значения пули и врага одинаковы, а чем если два клипа перекрываются. Это приводит к тому, что пули идут прямо через врагов, но не регистрируются как удары. Возможно, мне не хватает рамки?

Есть ли способ, которым я могу сделать hitTestPoint Возвращение true, если пуля попадает в противника совсем не так, как если бы пуля и вражеские координаты были одинаковыми?

Спасибо!

ответ

0
+0

Это лучше, спасибо. Хотя он все еще выглядит немного ошибкой. Иногда пуля проходит прямо, не обнаруживая попадания, хотя это может быть связано с тем, что пуля проскакивает через врага, когда она движется. –

+0

Это может быть ваша частота кадров. Если ваша пуля перепрыгивает через объект между кадрами, это будет пропущено. – Sam

0

Да, если у вас MovieClips слишком малы, кадр х будет только право на объект и следующий кадр он будет передавать его , вы можете захотеть сделать «hitbox» больше, например, сделать мувиклип больше с альфа-прямоугольниками.

Смежные вопросы