0

我有一个关于动作脚本 3 的问题。

我在做一个游戏,游戏的基本规则是:

  1. 一个物体从上面掉下来
  2. 英雄(用户)必须避开物体
  3. 如果物体撞到地面或英雄:英雄死亡或物体再次从顶部坠落。

我正在为对象使用添加子方法,并为秋季使用计时器功能。

问题是:当物体撞到地面时,函数不会循环。它就这样结束了。所以不会有任何坠落的物体了。

请帮我。谢谢 :)

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
    }
}
4

2 回答 2

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;
}
于 2013-04-24T09:33:20.470 回答
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;
}

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

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

于 2013-04-24T14:03:56.957 回答