使用cocos2d iPhone制作流背景效果的问题

时间:2012-05-11 10:05:05

标签: cocos2d-iphone

我正在使用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 * iPad的屏幕宽度(480 * 2),所有这一切。

1 个答案:

答案 0 :(得分:0)

假设您的图片从右向左滚动。根据您的代码,一旦图像滚动过某一点,您就会将其向右移动。

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

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