Я пишу игру, у нее есть враги и пули. Когда пуля попадает в противника, я хочу уничтожить врага и пулю. Я использую метод 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, если пуля попадает в противника совсем не так, как если бы пуля и вражеские координаты были одинаковыми?
Спасибо!
Это лучше, спасибо. Хотя он все еще выглядит немного ошибкой. Иногда пуля проходит прямо, не обнаруживая попадания, хотя это может быть связано с тем, что пуля проскакивает через врага, когда она движется. –
Это может быть ваша частота кадров. Если ваша пуля перепрыгивает через объект между кадрами, это будет пропущено. – Sam