好吧,想想太空入侵者和加拉加。我在屏幕顶端有一个敌人中队。它们作为一个组向左、右、下移动屏幕。每隔一段时间,敌人就会离开战斗群,攻击玩家的战舰。做一些贝塞尔曲线,试图攻击玩家的飞船。如果敌方战斗机没有击中,他(1)飞离屏幕底部,隐藏,移动到屏幕顶部,出现并飞回到它在中队的位置。问题是敌机飞回它离开中队的位置,而不是它现在的位置。
行动(bezier ),(延迟5秒),(隐藏敌人战斗机),(延迟1秒),(将敌人战斗机移至屏幕上方),(显示敌人战斗机),(callfunc以使敌人战斗机在中队中的新位置),(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;
}发布于 2014-08-02 00:27:57
我解决这一问题的方法是:(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))的屏幕上重新出现。然后它飞回中队的位置。
https://stackoverflow.com/questions/25049163
复制相似问题