1

編集:質問がひどく書かれている場合は、このページの下部にあるのと同じリンクのビデオ( 3 )を見てください。

ccBezierConfigとCocos2Dを使用して非常に単純なベジェ曲線を描画しようとしています。ウィキペディアを読んで、私はビットコントロールポイントを理解しようとしましたが、この画像を見つけました:

http://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Bezier_2_big.png/240px-Bezier_2_big.png

私が画像を撮ったウィキペディアのページを見ると、かっこいいアニメーションがあります。こちらをご覧ください。

これは私が使用したコードです:

        CCSprite *r = [CCSprite spriteWithFile:@"hi.png"];
        r.anchorPoint = CGPointMake(0.5f, 0.5f);
        r.position = CGPointMake(0.0f, 200.0f);

        ccBezierConfig bezier;
        bezier.controlPoint_1 = CGPointMake(0.0f, 200.0f);
        bezier.controlPoint_1 = CGPointMake(180.0f, 330.0f);
        bezier.endPosition = CGPointMake(320.0f,200.0f);

        id bezierForward = [CCBezierBy actionWithDuration:1 bezier:bezier];
        [r runAction:bezierForward];
        [self addChild:r z:0 tag:77];

アプリはポートレートモードで実行され、1のコントロールポイントと私のコードのコントロールポイントに一致する私の推測は次のとおりです。

sprite.position should correspond to P0
bezier.controlPoint_1 should correspond to P0 
bezier.controlPoint_2 should correspond to P1
bezier.endPosition  should correspond to P2

私は2つのアプローチを試しました。スプライトの位置を設定し、設定しないことによって。

ウィキペディアスキーマ1の場合、ポイントは3つしかない ため、位置はcontrolPoint_1と同じである必要があると想定しました。

私は静かに理解していない出力を取得します..私はそれの小さなビデオを作りました、プライベートユーチューブビデオです:

ビデオを見るにはここをクリックしてください

4

1 に答える 1

2

OK、答えはかなり簡単です...

次ベジェ曲線は、cocos2dによって描かれたものではありません。代わりに、同じwikiページで3次ベジェ曲線を確認してください。それはあなたが見なければならないものです。

  1. 初期位置はスプライト(P0)の位置です
  2. コントロールポイント1と2は、それぞれP1とP2です。
  3. 終点は終点です。

素敵なビデオ、ところで、私はそれをxD楽しんだ。


CCActionInterval.hcocos2dライブラリのファイルからの証拠:

/** An action that moves the target with a cubic Bezier curve by a certain distance.
 */
@interface CCBezierBy : CCActionInterval <NSCopying>
{
    ccBezierConfig config;
    CGPoint startPosition;
}

このリンクは、値を微調整してアプリを実行するのではなく、視覚的に3次ベジェ曲線を作成するのに役立ちます。

于 2012-09-14T19:37:07.933 に答える