2012-05-11 32 views
0

我正在使用cocos2d並嘗試使背景流動的效果... 所以我將代碼放在下面。 但有一些問題。 當時間到了,兩幅圖像之間的距離比第一次更大。 這是爲什麼? 我不明白這一點,任何人幫助我? 錯誤在哪裏? 代碼如下。使用cocos2d製作流動背景效果的問題iPhone

- (無效)啓動畫面:(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)]; 

}

在這裏,圖像大小是2 * iphone(480 * 2)的屏幕寬度,所有的那。

回答

0

假設您的圖像從右向左滾動。根據您的代碼,一旦圖像滾動經過某個點,就會將其移回右側。

問題是,位置不是基於像素邊界。您實際上可以在子像素邊界上放置圖像,例如{100.5,100.12345}。這可能會造成差距,尤其是如果您的滾動代碼容易產生舍入錯誤。例如,如果將移動速度與更新之間的增量時間相乘,以便讓圖像以相同速率滾動而不考慮幀速率,就很容易發生這種情況。

最簡單的修復方法是將兩個圖像重疊1個像素。另一種可能的解決方案是將所有圖像添加到同一個節點(也可以是spritebatch節點或圖層),然後只移動包含圖像的單個節點。這樣,圖像總是保持彼此之間的固定距離。

+0

好的,我明白你的答案。我的圖像是否沒有像素計算?我認爲按照像素縮放我的圖像。那麼上面的代碼不是基於每個像素? – user1304842