1

我发现了几篇文章,教如何将 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"

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

4

1 回答 1

2

不确定您要做什么,但这就是我在 Cocos2D 中沿贝塞尔路径移动一些精灵的方式:

- (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];
}

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

如果您想构建更复杂的路径,只需使用ccBezierConfig和的序列CCBezierBy

于 2012-09-14T10:10:57.980 回答