我正在写一个游戏,它有敌人和子弹。当子弹击中敌人时,我想摧毁敌人和子弹。我正在使用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() {
}
}
}
问题是,如果bullet和敌人的x和y值都相同,hitTestPoint
只返回true,而不是两个影片剪辑重叠。这导致子弹直接通过敌人,但它没有记录为命中。也许我错过了一个边界框?
如果子弹完全击中敌人而不是只有子弹和敌人的坐标是相同的,那么我有没有办法使hitTestPoint
返回true?
谢谢!
答案 0 :(得分:0)
你想要hitTestObject(),而不是hitTestPoint()
答案 1 :(得分:0)
是的,如果您的影片剪辑太小,框架x将恰好位于对象和下一帧将传递它,您可能想要使“hitbox”更大,就像使用alpha矩形做更大的movieclip