我是Cocos2D的新手,遇到了问题。我也搜索了很多,但似乎没有找到我的问题的答案。情况是:
当游戏开始时,主精灵应该继续下降(就像计划崩溃一样)。如果用户触摸屏幕中的任何位置,精灵应该向上移动到触摸点的Y坐标,当精灵到达该点时,它应该从该点再次开始下降。想象一下飞机坠毁(下降),当用户点击任何地方时,它会上升(起飞一点点)然后再次开始下降。我们不必让它崩溃。
所以,我已经实现了下降的部分。以及上涨部分。 但问题是,当精灵完成上升时,它不会从那里开始下降,而是继续从它上升的地方开始下降。
请帮助我实现这一目标。
这是我在init()
方法中下载的代码:
[plane runAction:[CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveBy actionWithDuration:1 position:ccp(0,-20)],
nil]]];
以touchesBegan
方式上传的代码:
[plane runAction:[CCMoveBy actionWithDuration:1 position:ccp(0,20)]];
答案 0 :(得分:1)
问题是你使用了一个可重复的动作,一旦你应用了"向上移动"动作你会有不一致,因为两个动作都在同一个对象上工作(我不记得先前的动作是否被取消但是这种方法不起作用)。
所以我会为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向下移动仅在向上移动动作完成后才会发生)