1

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

1 回答 1

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

于 2013-02-17T14:18:48.077 回答