我试图在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,则行为略有不同。在这种情况下,相机会在短暂延迟后从右向左开始平移。然后在相机变焦时停止平移。最后,相机将从右向左重新开始平移,同时放大。
如果上述代码没有任何问题,那么是否有更好的方法可以实现平滑过渡,包括缩放操作和平移操作?
答案 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];