我正在使用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),所有这一切。
答案 0 :(得分:0)
假设您的图片从右向左滚动。根据您的代码,一旦图像滚动过某一点,您就会将其向右移动。
问题是,位置不是基于像素边界。您实际上可以在子像素边界上定位图像,例如{100.5,100.12345}。这可能会产生间隙,特别是如果您的滚动代码容易产生舍入错误。例如,如果将移动速度乘以更新之间的增量时间,以便使图像以相同的速率滚动而不考虑帧速率,则很容易发生这种情况。
最简单的解决方法是将两个图像重叠1个像素。另一种可能的解决方案是将所有图像添加到同一节点(也可以是spritebatch节点或图层),然后仅移动包含图像的单个节点。这样,图像始终保持彼此固定的距离。