在AS3中使用hitTest发生堆栈溢出错误

时间:2013-06-14 14:18:15

标签: actionscript-3

所以,我有一个小行星的类文件,在其中,我使用了这段代码:

public var ourAsteroid:Asteroid = new Asteroid(stage);

允许小行星成为变量,但是当我添加这个块时:

public function hitTest(e:Event) : void {
        if (ourAsteroid.hitTestObject(ourAsteroid))
            speed = -speed;


    }

我在Asteroid.As文件中遇到#1023堆栈溢出错误。

1 个答案:

答案 0 :(得分:0)

ourAsteroid.hitTestObject(ourAsteroid)导致错误,因为它正在对自身执行命中测试。

hitTestObject只应针对其他对象执行,因为如果对象重叠,它将返回true。鉴于评论中的speed = -speed行,我猜你实际上要做的就是让小行星反弹一些东西。如果您希望它从屏幕边缘反弹,您只需要测试对象的边界何时到达边缘,例如在水平线上:

if(ourAsteroid.x < 0) {
    ourAsteroid.x = 0;
    speed = -speed;
}
else if(ourAsteroid.x > stage.width - ourAsteroid.width) {
    ourAsteroid.x = stage.width - ourAsteroid.width;
    speed = -speed;
}

如果您希望它反弹另一个对象,只需像以前一样使用点击测试:ourAsteroid.hitTestObject(someOtherObject)。请注意,这是一个非常简单的实现,您可能会看到诸如对象相互卡住之类的问题,但它至少会让您开始。