同时运行两个Cocos2D动作序列不起作用

时间:2013-07-08 20:39:27

标签: ios cocos2d-iphone action

我试图在box2d世界中使用两个动作序列移动相机。目标是实现平滑过渡,让用户在相机平移时看到整个游戏空间。第一个序列包含一个短延迟动作,然后是一个从右向左移动相机的动作。第二个序列包含相同的短延迟动作,后跟缩小动作和放大的动作。缩小和放大的组合持续时间等于平移动作。不幸的是,两个序列中的动作都没有对齐。相反,一个序列的一部分将运行,然后另一个序列的一部分将运行,最后它们以同步方式运行,用于序列的最后一部分。以下是我正在使用的代码:

[self runAction:
         [CCSequence actions:
          [CCDelayTime actionWithDuration:0.5],
          [CCMoveBy actionWithDuration: 1.0f
                              position:ccp(-lastXPositionForCamera, 0)],
          [CCCallFunc actionWithTarget:self
                              selector:@selector(startOver)],
          nil]];

// Run a second action at the same time.
// This second action will cause the camera to zoom out and then back in
[self runAction:
     [CCSequence actions:
      [CCDelayTime actionWithDuration:0.5],
      [CCScaleTo actionWithDuration: 0.5f scale:0.5f],
      [CCScaleTo actionWithDuration: 0.5f scale:1.0f], nil]];

所以会发生以下情况:摄像机缩小后会有轻微的延迟。相机变焦后,相机将从右向左开始平移,同时放大。

如果我将初始CCDelayTime更改为0.4,则行为略有不同。在这种情况下,相机会在短暂延迟后从右向左开始平移。然后在相机变焦时停止平移。最后,相机将从右向左重新开始平移,同时放大。

如果上述代码没有任何问题,那么是否有更好的方法可以实现平滑过渡,包括缩放操作和平移操作?

1 个答案:

答案 0 :(得分:0)

这不能解决两个动作的问题,但它会适用于你的情况......

您可以在延迟后使用CCSpawn在一个操作中调用平移和缩放操作。试试吧:

[self runAction:
     [CCSequence actions:
      [CCDelayTime actionWithDuration:0.5],
      [CCSpawn actions:
       [CCSequence actions:
        [CCMoveBy actionWithDuration: 1.0f
                          position:ccp(-lastXPositionForCamera, 0)],
        [CCCallFunc actionWithTarget:self
                          selector:@selector(startOver)],
        nil],
       [CCSequence actions:
        [CCScaleTo actionWithDuration: 0.5f scale:0.5f],
        [CCScaleTo actionWithDuration: 0.5f scale:1.0f], nil]
       ,nil] ,nil];