0

因此,我有一个小行星的类文件,在其中,我使用了以下代码:

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

为了让小行星成为一个变量,但是当我添加这个块时:

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


    }

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

4

1 回答 1

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). 请注意,这是一个非常简单的实现,您可能会看到对象相互卡住等问题,但它至少可以帮助您入门。

于 2013-06-14T14:56:50.717 回答