将sprite向上移动并将其设置为起始位置
问题描述:
我是Cocos2D的新手,并且遇到问题。我也搜查了很多,但似乎没有找到我的问题的答案。情况是:将sprite向上移动并将其设置为起始位置
当游戏开始时,主精灵应该继续下去(如计划崩溃)。如果用户触摸屏幕中的任何位置,精灵应该移动到触摸点的Y坐标,当精灵到达该点时,它应该从那一点开始再次下降。想象一下飞机坠毁(下滑),当用户点击任何地方时,它会上升(稍微下降),然后再次开始下降。我们不必让它崩溃在地上。
所以,我已经实现了下行部分。以及上升的部分。 但问题是,当精灵完成向上时,它不会从那里开始下降,而是从它上升的地方继续下去。
请帮我实现这个目标。
这是我在init()
方法下去代码:为touchesBegan
方法拔地而起
[plane runAction:[CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-20)],
nil]]];
代码:
[plane runAction:[CCMoveBy actionWithDuration:1 position:ccp(0,20)]];
答
的问题是,您使用的是可重复的动作,一旦你申请“向上移动”操作会产生不一致性,因为这两个操作都在同一个对象上工作(我不记得上一个操作是否被取消,但这种方法无效)。
所以我会做followng为init()
:
.
.
[self startDownMovement];
.
.
然后实现startDownMovement()
为:
[plane runAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-plane.potision.y)],
[CCCallBlock actionWithBlock:
^{
// Do game over logic. (i.e. plain crashed)
}],nil]];
而对于touchBegan()
:
[plane stopAllActions];
CGPoint location = [touch locationInView:touch.view];
[plane runAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,location.y)],
[CCCallBlock actionWithBlock:
^{
[self startDownMovement];
}],nil]];
我在这里所做的开始向下移动(我假设y = 0是碰撞点)我通过减去它的y位置来移动精灵。
如果用户触摸屏幕的平面y位置将被移动到的触摸点之后的上下运动将被再次调用(因为我用CCSequence向下移动仅向上移动动作之后已经完成将发生)