9

私が抱えている問題は、アンカー ポイント スプライトを変更するたびに、現在のアンカー ポイントに対して自動的に回転することです。そして、私はそれが起こることを望んでいません。

私が従った手順

  1. アンカーポイント (0.5, 0.5) でスプライトを作成する
  2. アンカーポイントを (0,1) に変更
  3. スプライトを 90 度回転させました。(CCRotateBy を使用。スプライトが正しく回転)
  4. アンカーポイントを (0.5, 0.5) に変更しました (これまでのところすべて問題ありません。これは、私が維持する必要がある位置です)。sprite.rotation は 90 になりました。
  5. アンカー ポイントを (1,0) に変更しました (スプライトは、指定されたアンカー ポイントに対して自動的に 90 度回転します。この動作を停止する必要があります)。

スプライトの回転を 0 にリセットする方法はありますか? テクスチャを実際に回転させずに (つまり、テクスチャを現在の形に保ちます - 実際のテクスチャを 90 度回転させます)、手順 4 でアンカー ポイントまたは位置を変更します。ポイント5から続けることができます。

4

4 に答える 4

8

Lukman が言うように、アンカー ポイントは常に回転に影響します。目標は回転とは異なるアンカー ポイントでスプライトの位置を指定できるようにすることなので、スプライトの親として空の CCNode を作成することをお勧めします。

このようにして、スプライトの位置をこの親ノードに相対的に設定して、アンカー ポイントの変更を補正し、スプライトの回転のためにアンカー ポイントを保持しながら、親ノードを位置に使用することができます。

于 2011-06-09T16:09:48.840 に答える
5

anchorPointpositionとの両方に影響しrotationます。あなたはそれがそれらのどちらかに影響を与えるのを止めることはできません。

しかし、あなたの質問を読んで、あなたanchorPointは回転に影響を与えないようにしたいので、私はここであなたが変更する理由anchorPointは位置のためであると仮定します、例えばあなたはccp(1, 0)スプライトを右下隅にしたいのでそれを設定しています、スプライトの中心の代わりに、位置を設定する場所になります。

私の提案は、まったく変更しないanchorPointで、スプライトの位置を設定する方法を変更することです。この小さな関数を使用して、位置を調整できます。

CGPoint adjustedPosition(const CGPoint position, const CGPoint anchor, const CGSize size) {
    return CGPointMake(position.x - (anchor.x - 0.5) * size.width, position.y - (anchor.y - 0.5) * size.height);
}

ここで、ポジショニングを行うときに、の代わりに(1,0)のanchorPointを使用する場合は、次のsprite.position = ccp(200, 300)ようにする必要があります。

sprite.position = adjustedPosition(ccp(200, 300), ccp(1.0, 0.0), sprite.contentSize);

必要に応じて、数学の背後にあるロジックを後で投稿します。そうでなければ、これが役立つことを願っています。

于 2011-06-08T16:25:03.090 に答える
1

スプライトのアンカーを正しい座標にインストールするのに役立つかもしれません。

void SetAnchorPosition(CCSprite * スプライト、const CCPoint & ポイント)
{
    static CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    double x = ((double)1/(double)winSize.width)*(double)point.x;
    double y = ((double)1/(double)winSize.height)*(double)point.y;

    sprite->setAnchorPoint(ccp(x,y));
    sprite->setPosition(point);
}
于 2012-07-11T08:13:00.943 に答える