Actionscript 3 AS3中hitTest的堆栈溢出错误

Actionscript 3 AS3中hitTest的堆栈溢出错误,actionscript-3,Actionscript 3,因此,我有一个小行星的类文件,在其中,我使用了以下代码: public var ourAsteroid:Asteroid = new Asteroid(stage); 为了让小行星成为一个变量,当我加入这个区块时: public function hitTest(e:Event) : void { if (ourAsteroid.hitTestObject(ourAsteroid)) speed = -speed; } 我在Asteroid

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

public var ourAsteroid:Asteroid = new Asteroid(stage);
为了让小行星成为一个变量,当我加入这个区块时:

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


    }

我在Asteroid.As文件中发现了#1023堆栈溢出错误

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;
}
if(ourAsteroid.x<0){
小行星x=0;
速度=-速度;
}
else if(ourAsteroid.x>stage.width-ourAsteroid.width){
ourAsteroid.x=stage.width-ourAsteroid.width;
速度=-速度;
}

如果您想让它从另一个对象上弹起,只需像以前一样使用命中测试:
ourAsteroid.hitTestObject(someOtherObject)
。请注意,这是一个非常简单的实现,您可能会看到一些问题,例如对象彼此卡住,但至少可以让您开始了。

好吧,我正在使用数组将多个小行星随机添加到屏幕上,如果这些小行星接触,我会尝试将其添加到何处,然后我的答案中的最后一段仍然有效:你只需要确保你没有在测试一个物体时撞到它自己。但是,总的来说,这是行不通的:即使是基本的边界框碰撞,您也需要检查小行星是否在顶部/底部/左侧/右侧碰到另一颗小行星,并相应地更改x或y速度(即,您需要两个速度变量,并使用类似于我提供的代码来测试与屏幕侧面的碰撞)。