Cocos2d和iOS:如何使用UIBezierPath动画CCSprite动作?

时间:2012-09-14 10:05:32

标签: cocos2d-iphone sprite uibezierpath ccsprite cgpath

我发现several post教授如何将UIBezierPaths与CoreAnimation一起使用。这是有效的,因为CAKeyframeAnimation对象具有一个名为path的属性,该属性的类型为CGPath,并且UIBezierPaths对象也具有CGPath属性。

我想知道如何让CCSprite在CGPath之后移动。

在CGPath中有一个函数CGPathGetCurrentPoint,它可以帮助我获取路径中的当前点,但是我找不到像“移动到下一个点”这样的东西。

我的伪代码会像这样工作:

Create a CCSprite subclass with a UIBezierPaths property
Initialize the UIBezierPaths instance

Allocate the CCSprite subclass in a layer
schedule updates
In update method
     Reposition the CCSprite sublcass instance by getting the CGPathGetCurrentPoint to CGPathGetCurrentPoint
     Move the path forward by calling "move to next point"

知道这是否有效?这是一种有效的方法吗?

1 个答案:

答案 0 :(得分:2)

不确定你要做什么,但这就是我在Cocos2D中沿bezier路径移动一些精灵的方法:

- (CCBezierTo*)bezierMoveTo:(CGPoint)destination node:(CCNode*)node duration:(float)d {

 static ccBezierConfig bzPaths[5] = {
    {{1050, 900}, {1200, 1400}, {1100, 900}},
    {{1100, 750}, {1300, 1550}, {1650, 500}},
    {{800, 850}, {500, 1100}, {400, 700}},
    {{700, 700}, {1500, 1200}, {400, 900}},
    {{900, 650}, {100, 900}, {900, 400}}
 };
 ccBezierConfig bezierOne;
 bezierOne = bzPaths[PATH_INDEX];
 return [CCBezierTo actionWithDuration:d bezier:bezierOne];
}

然后可以在精灵上运行返回的操作。在我的情况下,我有一组静态路径,我随机选择一个。在您的情况下,似乎您希望将路径存储在自定义精灵中。除此之外,一切都应该有效。

如果您想构建更复杂的路径,只需使用ccBezierConfigCCBezierBy的序列。