满足条件时重复一个函数

时间:2013-04-24 09:28:53

标签: actionscript-3 flash loops actionscript air

我对动作脚本3有疑问。

我正在制作游戏,游戏的基本规则是:

  1. 一个物体从顶部落下
  2. 英雄(用户)必须避开对象
  3. 如果物体撞击地面或英雄:英雄死亡或物体从顶部再次坠落。
  4. 我正在使用对象的add子方法和fall的计时器函数。

    问题是: 当物体撞击地面时,该功能不会循环。它就像那样结束。所以不再有任何掉落的物体。

    请帮帮我。谢谢:))

    stage.addEventListener(Event.ENTER_FRAME, addfire1);
    
    function addfire1(e:Event):void
    {
        if (api1==false)//if object is not on the stage
        {
            randomx = randomRange();//generate random X
            addChild(api);
            api.x = randomx;//set x
            api1 = true;//object is now on stage
        }
        if (api.hitTestObject(hero) || api.hitTestObject(ground))
        {
            falltimer.stop();
            //stop timer;
            falltimer.reset();
            //reset fall Count to zero ;
            removeChild(api);//object removed
            api1=false;
        }
    }
    
    function firefall(Event:TimerEvent):void
    {
        if (api1)
        {
            api.y +=  20;//set speed y
        }
    }
    

2 个答案:

答案 0 :(得分:2)

将这两种情况分开:英雄和地板。

if (api.hitTestObject(hero))
{
    falltimer.stop();
    //stop timer;
    falltimer.reset();
    //reset fall Count to zero ;
    removeChild(api);//object removed
    api1=false;
} 
else if (api.hitTestObject(ground))
{
   //reset object's position
   api.y = -20;
}

答案 1 :(得分:0)

假设当时只有一个物体掉落,我不会移除物体,而只是将物体移动到原始的y位置和新的x位置。而不是让计时器我创建一个每次进入框架时运行的更新功能。

stage.addEventListener(Event.ENTER_FRAME, update);

private function update(e:Event):void
{
    if(!api1) //if object is not on the stage (same as api1==false)
    {
        addfire1();
    }

    if(api1) //if object if on stage (same as api1==true)
    {
        firefall();
    }
}

private function addfire1(e:Event):void
{
    randomx = randomRange();//generate random X
    addChild(api);
    api.x = randomx;//set x
    api1 = true;//object is now on stage

    if (api.hitTestObject(hero))
    {
        hitHero(); //execute what should happen to the hero when the he is hit
        resetFire();
    }
    else if(api.hitTestObject(ground))
    {
        resetFire();
    }
}

private function firefall(Event:TimerEvent):void
{
    api.y +=  20;//set speed y
}

private function resetFire():void
{
    api.x = randomRange();
    api.y = 0;
}

如果你这样写,你就不必混淆了。尽量保持一切分开,一个功能做一件事。如果你正在制作一款大型游戏,请尝试将所有内容分开。

希望这可以解决问题,让您更轻松地完成游戏:)