2012-05-11 5 views
0

私はcocos2dを使っていて、背景が流れているという効果を得ようとしています... 私は次のコードを作成します。 しかし、いくつかの問題があります。 時間が経過すると、2つの画像間の距離が最初よりも大きくなります。 これはなぜですか? 私はこれを理解することができず、誰かが私を助けますか? バグはどこにありますか? コードに従います。cocos2d iPhoneを使用してフローの背景効果を作成する際の問題

- (ボイド)startScreen: {

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)]; 

} DT(ccTime) ここ

、画像サイズが*(* 2 480)iPhoneのScreenWidth 2であり、全てのそれ。

答えて

0

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

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

最も簡単な解決策は、2つの画像を1つのピクセルで重ねることです。もう1つの可能な解決方法は、すべてのイメージを同じノードに追加することです(スプライトバッチノードまたはレイヤーにすることもできます)。このようにして、画像は常に互いに一定の距離にとどまります。

+0

いいえ、私はあなたの答えを理解しています。私のイメージはピクセルなしで計算されますか?私はピクセルごとに画像を拡大縮小すると思った。次に、上のコードはピクセルごとに基づいていないのですか? – user1304842

関連する問題