好吧,想想 Space Invaders 和 Galaga。我在屏幕顶部有一个敌方中队。他们作为一组在屏幕上左右移动。不时有敌方战士离开队伍并攻击玩家的船。做一些贝塞尔曲线,试图攻击玩家的船。如果敌方战斗机未命中,他 (1) 飞离屏幕底部,隐藏,移动到屏幕顶部,出现并飞回其在中队的位置。问题是敌方战斗机飞回了它离开中队的位置,而不是它当前的位置。
- 设置变量 new_pos
- 延迟调用动作函数来处理贝塞尔飞行路径,例如
action ((bezier), (延迟 5 秒), (隐藏敌方战机), (延迟 1 秒), (将敌方战机移动到屏幕顶部), (显示敌方战机), (callfunc 获取敌方战机的新位置中队),(贝塞尔回到新位置)
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;
}