好的想想Space Invaders和Galaga。我在屏幕顶部有一个敌人中队。它们作为一组在屏幕上左右移动。敌人战斗机偶尔离开小组并攻击玩家的船只。做一些bezier曲线,试图攻击玩家的船。如果敌方战斗机未命中,他(1)飞离屏幕底部,隐藏,移动到屏幕顶部,出现并飞回其在中队的位置。问题是敌人的战斗机飞回到它离开中队的位置,而不是它当前的位置。
动作((bezier),(延迟5秒),(隐藏敌方战斗机),(延迟1秒),(将敌方战斗机移动到屏幕顶部),(显示敌方战斗机),(调用命令获取敌方战斗机)在中队的新职位),(bezier回到新的位置)
一旦调用父函数,就会调用CallFunc。不是在延迟之后。我期待的是什么?
var epos = 0;
if (enemy_fly_out_from == 0)
this.runAction(cc.Sequence.create(cc.DelayTime.create(enemy_fly_out_duration), cc.CallFunc.create(this.reduce_flied_out, this), cc.MoveTo.create(1, cc.p(ship_pos.x-25, -25)), cc.Hide.create(), cc.MoveTo.create(0, cc.p(ship_pos.x-25, 610)), cc.Show.create(), cc.CallFunc.create(this.get_enemy_pos(which_enemy), this), cc.BezierTo.create(5, [cc.p(ship_pos.x-25, 600), cc.p(pos.x, 600), cc.p(epos.x,epos.y)]), cc.CallFunc.create(this.end_fly_out(which_enemy), this)));
else
this.runAction(cc.Sequence.create(cc.DelayTime.create(enemy_fly_out_duration), cc.CallFunc.create(this.reduce_flied_out, this), cc.MoveTo.create(1, cc.p(ship_pos.x+25, -25)), cc.Hide.create(), cc.MoveTo.create(0, cc.p(ship_pos.x+25, 610)), cc.Show.create(), cc.CallFunc.create(this.get_enemy_pos(which_enemy), this), cc.BezierTo.create(5, [cc.p(ship_pos.x+25, 600), cc.p(pos.x-100, 600), cc.p(epos.x, epos.y)]), cc.CallFunc.create(this.end_fly_out(which_enemy), this)));
},
end_fly_out:function(which_enemy)
{
enemies_array[which_enemy].flied_out = 0;
},
get_enemy_pos:function(which_enemy)
{
epos = enemies_array[which_enemy].getPosition();
},
reduce_flied_out:function()
{
enemies_flied_out = 0;
}
答案 0 :(得分:0)
我通过以下方法解决了这个问题:(1)根据从中队飞出的敌方战斗机创建一个新的精灵(2)隐藏敌方战斗机(3)显示新精灵(4)新精灵充当敌人战斗机(5)隐藏精灵(6)显示敌方战斗机
感谢您的时间@Sebastian Vansteenkiste。如果防御者不射击精灵,即精灵完成其飞行,那么它会从底部飞出屏幕 cc.MoveTo.create(1,cc.p(ship_pos.x + 25,-25))。然后它再次出现在屏幕顶部的屏幕cc.MoveTo.create(1,cc.p(ship_pos.x + 25,610))。然后它飞回中队的位置。