hitTestPoint()没有正确测试碰撞

时间:2012-02-22 03:44:21

标签: actionscript-3 actionscript

我正在写一个游戏,它有敌人和子弹。当子弹击中敌人时,我想摧毁敌人和子弹。我正在使用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.bulletsthis.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?

谢谢!

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

是的,如果您的影片剪辑太小,框架x将恰好位于对象和下一帧将传递它,您可能想要使“hitbox”更大,就像使用alpha矩形做更大的movieclip