我发现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"
知道这是否有效?这是一种有效的方法吗?
答案 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];
}
然后可以在精灵上运行返回的操作。在我的情况下,我有一组静态路径,我随机选择一个。在您的情况下,似乎您希望将路径存储在自定义精灵中。除此之外,一切都应该有效。
如果您想构建更复杂的路径,只需使用ccBezierConfig
和CCBezierBy
的序列。