0

私はcocos2dで作業していて、背景が流れているという効果を作ろうとしています... そこで、次のコードを作成します。しかし、いくつかの問題があります。時間切れになると、2 つの画像間の距離が最初よりも大きくなります。これはなぜですか?私はこれを理解できません。誰か助けてくれませんか?バグはどこにありますか。コードに従います。

-(void) startScreen:(ccTime) dt {

mBackgroundFar.position = ccp(mBackgroundFar.position.x - 50*dt , mBackgroundFar.position.y);
if (mBackgroundFar.position.x < -SCREEN_WIDTH * 2 )
    [mBackgroundFar setPosition:ccp(SCREEN_WIDTH*2 , mBackgroundFar.position.y)];
mBackgroundFar1.position = ccp(mBackgroundFar1.position.x - 50*dt , mBackgroundFar1.position.y);
if (mBackgroundFar1.position.x < -SCREEN_WIDTH * 2 )
    [mBackgroundFar1 setPosition:ccp(SCREEN_WIDTH*2 , mBackgroundFar1.position.y)];

mBackgroundMiddle.position = ccp(mBackgroundMiddle.position.x - 150*dt , mBackgroundMiddle.position.y);
if (mBackgroundMiddle.position.x < -SCREEN_WIDTH * 2 )
    [mBackgroundMiddle setPosition:ccp(SCREEN_WIDTH*2 , mBackgroundMiddle.position.y)];
mBackgroundMiddle1.position = ccp(mBackgroundMiddle1.position.x - 150*dt , mBackgroundMiddle1.position.y);
if (mBackgroundMiddle1.position.x < -SCREEN_WIDTH * 2 )
    [mBackgroundMiddle1 setPosition:ccp(SCREEN_WIDTH*2 , mBackgroundMiddle1.position.y)];

mBackgroundNear.position = ccp(mBackgroundNear.position.x - 250*dt , mBackgroundNear.position.y);
if (mBackgroundNear.position.x < -SCREEN_WIDTH * 2 )
    [mBackgroundNear setPosition:ccp(SCREEN_WIDTH*2 , mBackgroundNear.position.y)];
mBackgroundNear1.position = ccp(mBackgroundNear1.position.x - 250*dt , mBackgroundNear1.position.y);
if (mBackgroundNear1.position.x < -SCREEN_WIDTH * 2 )
    [mBackgroundNear1 setPosition:ccp(SCREEN_WIDTH*2 , mBackgroundNear1.position.y)];

}

ここで、画像のサイズはiPhoneの2*ScreenWidth(480*2)、すべてです。

4

1 に答える 1

0

画像が右から左にスクロールするとします。コードによると、画像が特定のポイントを超えてスクロールしたら、右に戻します。

問題は、位置がピクセル境界に基づいていないことです。実際には、{100.5, 100.12345} などのサブピクセル境界に画像を配置できます。これにより、特にスクロール コードで丸め誤差が発生しやすい場合に、ギャップが生じる可能性があります。たとえば、フレームレートに関係なく同じレートで画像をスクロールさせるために、移動速度に更新間のデルタ時間を掛けると、これは簡単に発生する可能性があります。

最も簡単な修正方法は、2 つの画像を 1 ピクセルずつ重ねることです。もう 1 つの考えられる解決策は、すべての画像を同じノード (スプライトバッチ ノードまたはレイヤーの場合もあります) に追加してから、画像を含む単一のノードのみを移動することです。そうすれば、画像は常に互いに一定の距離に留まります。

于 2012-05-11T10:21:17.000 に答える