0

好的,所以我有一些代码说如果执行命中测试,变量会增加 1。但是,当我运行它时,我会得到像 1、1、1、2、5、3 这样的疯狂数字, 2,5,2,3,4,1,1 没有模式,只是随机的。这是代码:

public function loop(e:Event)
{
    y +=  speed;



    if (y > stage.stageHeight)
    {
        setupAsteroid(false);
    }

    //hittest for the asteroid

    if (hitTestObject(target))
    {
        stageRef.addChild(new Explosion(stageRef, x, y));
        trace("Hit");
        kills ++;
        trace(kills);
        if(kills == 3){
            trace("Success");
        }
}

我已经在使用的函数中包含了所有代码,如您所见,并非所有代码都是命中测试所必需的。此外,该变量被正确声明为

private var kills:Number = 0;

在同一个 .as 文件和类中。

4

1 回答 1

0

您在舞台上添加了一个Explosion,但没有迹象表明您从舞台上删除任何东西,或者至少停止检查hitTest. 另外我猜你的函数会loop(e:Event)监听一个ENTER_FRAME事件,在这种情况下,如果你没有从舞台上删除任何东西,hitTest每帧都将返回 true 并创建一个新的Explosion每一帧。为什么不只是添加一个公共变量来定位,喜欢public var destroyed:boolean = false;并重建你hitTest的阅读if(hitTestObject(target) && !target.destroyed)和在你的条件正文中添加target.destroyed = true;

更多的代码肯定会有所帮助。

于 2013-10-01T05:30:28.227 回答