0

我正在使用 cocos2d 并尝试制作背景流动的效果......所以我制作了以下代码。但是有一些问题。当时间到时,两个图像之间的距离比第一次更大。这是为什么?我无法理解这一点,任何人帮助我?错误在哪里。代码如下。

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

}

在这里,图像大小是 2*ScreenWidth of iphone(480*2),所有这些。

4

1 回答 1

0

假设您的图像从右向左滚动。根据您的代码,一旦图像滚动超过某个点,您将其移回右侧。

问题是,位置不基于像素边界。您实际上可以将图像定位在子像素边界上,例如 {100.5, 100.12345}。这可能会产生间隙,尤其是当您的滚动代码容易产生舍入错误时。例如,如果您将移动速度乘以更新之间的增量时间,以使图像以相同的速率滚动,而不管帧速率如何,这很容易发生。

最简单的解决方法是将两个图像重叠 1 个像素。另一种可能的解决方案是将所有图像添加到同一节点(也可以是 spritebatch 节点或图层),然后仅移动包含图像的单个节点。这样,图像之间始终保持固定距离。

于 2012-05-11T10:21:17.000 回答