1

CoreAnimation で UIBezierPaths を使用する方法を教える投稿をいくつか見つけました。これが機能するのは、CAKeyframeAnimation オブジェクトには CGPath 型の path というプロパティがあり、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];
}

返されたアクションは、スプライトで実行できます。私の場合、一連の静的パスがあり、ランダムに 1 つを選択します。あなたの場合、カスタム スプライト内にパスを保存したいようです。それとは別に、すべてが機能するはずです。

より複雑なパスを作成する場合は、単純にccBezierConfigとのシーケンスを使用しますCCBezierBy

于 2012-09-14T10:10:57.980 に答える