我对动作脚本3有疑问。
我正在制作游戏,游戏的基本规则是:
我正在使用对象的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
}
}
答案 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;
}
如果你这样写,你就不必混淆了。尽量保持一切分开,一个功能做一件事。如果你正在制作一款大型游戏,请尝试将所有内容分开。
希望这可以解决问题,让您更轻松地完成游戏:)