触摸时移动精灵并将其设置为起始位置

时间:2013-02-17 14:00:37

标签: cocos2d-iphone

我是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)]];

1 个答案:

答案 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向下移动仅在向上移动动作完成后才会发生)