Я пишу игру, в которой есть враги и пули. Когда пуля попадает в противника, я хочу уничтожить врага и пулю. Я использую метод 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
возвращает значение true, только если значения x и y для bullet и врага совпадают, а не если два фрагмента ролика перекрываются. Это приводит к тому, что пули проходят сквозь врагов, но не регистрируются как попадания. Возможно, мне не хватает ограничительной рамки?
Есть ли способ, которым я могу заставить hitTestPoint
вернуть истину, если пуля поразит врага вообще, а не только, если координаты пули и врага совпадают?
Спасибо!