1

次のコードを使用して、キャラクターが画面から落ちるときにカメラをキャラクターに追従させます。

[self runAction:[CCFollow actionWithTarget:charSprite worldBoundary:[levelLoader gameWorldSize]/*CGRectMake(0,0,320,3000)*/]];

コードは期待どおりに実行され、画面の上部から落下するキャラクターを追跡します。ただし、彼が画面の中央に到達すると、カメラは彼の追跡を停止します。

[levelLoader gameWorldSize]上記のコードと、をコメントアウトしたものに置き換えてみましたが、CGRectMake(0,0,320,3000)どちらも同じ結果が得られます。最後の手段として、www.raywenderlich.com で見つけた以前に機能したコードを使用しようとしました (以下を参照) (私が書いた別のゲームの x 軸で機能しました) が、同じ問題が発生しました。

-(void)setViewpointCenter:(CGPoint) position
{
 CGSize winSize = [[CCDirector sharedDirector] winSize];
 CGRect worldRect = [levelLoader gameWorldSize];

 int x = MAX(position.x, worldRect.origin.x + winSize.width / 2);
 int y = MAX(position.y, worldRect.origin.y + winSize.height / 2);
 x = MIN(x, (worldRect.origin.x + worldRect.size.width) - winSize.width / 2);
 y = MIN(y, (worldRect.origin.y + worldRect.size.height) - winSize.height/2);
 CGPoint actualPosition = ccp(x, y);

 CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2);
 CGPoint viewPoint = ccpSub(centerOfView, actualPosition);

 self.position = viewPoint;
}

私の世界は、LevelHelper を使用してポートレート モードで作成されています。

どんな助けでも大歓迎です!

4

1 に答える 1

1

CCFollow は、画面の幅/高さの半分を差し引いたワールド境界内でノードを追跡します。スプライトが y = 320 で落ち始めた場合、CCFollow は y = 160 まで続きます。

スプライトをワールド境界の上 (y = 3000) に配置するか、ワールド境界を負 (y = -3000) にすることができます。いずれにせよ、スプライトがワールド境界に到達すると、スクロールはワールド境界の手前で画面の幅/高さの半分で停止します。

于 2013-01-30T15:44:27.377 に答える