0

だからここに私がここでやろうとしていることの要点があります。

プレイヤーの移動に合わせて無限にスクロールするフォアグラウンド スプライトの配列があります。私がやりたいことは、プレーヤーが Y 軸上の特定のポイントを通過し始めたときに、前景のスプライトを移動しながら縮小することです。

プレイヤーが上がっているときに左下隅からスプライトをスケーリングできるようにしたいと思いますが、これは問題なく機能しています。

本当の問題は、プレイヤーが降りてきたときにスプライトを右下隅からスケーリングしたいということです。スケーリングする前に各スプライトのアンカー ポイントを 1,0 に設定することでこれを行うことができると 考えましたが、うまくいかないようです。スプライトは、左下隅からスケーリングされます。

ここで何が欠けていますか?

// do logic to identify the scale factor we want

for (CCSprite *sprite in foreground_sprites)
{
    CGPoint old_anchor = sprite.anchorPoint;
    [sprite setAnchorPoint:ccp(1,0)];
    [sprite setScale:scale_factor];
    [sprite setAnchorPoint:old_anchor];
}
4

2 に答える 2

0

このプロパティをいじってみましたか?

ignoreAnchorPointForPosition(false);

私はcocos2d-xを使用しています。それに似たものがあるはずです

于 2013-10-10T08:01:22.487 に答える
0

私の理解が正しければ、プレーヤーの Y 位置が増加している間は左下からスケーリングしますが、下降中は右下を使用してスケーリングしますか?

アンカーポイントだけを変更することはできません。アンカー ポイントと位置が連動して、スプライトを画面に配置します。したがって、(0,0) のアンカー ポイントを使用してスプライトを画面に配置した場合、画面上の同じ位置に維持しながらアンカー ポイントを (1,0) に切り替えたい場合は、位置を更新します。

CCSprite* sprite = ...;
sprite.anchorPoint = CGPointZero;
sprite.position = CGPointZero;

...

sprite.anchorPoint = CGPointMake(1.0f, 0.0f);
sprite.position = CGPointMake(sprite.position.x + (sprite.contentSize.width * sprite.scaleX * sprite.anchorPoint.x),
                              sprite.position.y + (sprite.contentSize.height * sprite.scaleY * sprite.anchorPoint.y));

うまくいけば、私はあなたの問題を正しく理解し、助けることができました.

于 2013-10-10T18:48:23.067 に答える