【问题标题】:Problems in making flow background effect using cocos2d iPhone使用cocos2d iPhone制作流动背景效果的问题
【发布时间】:2012-05-11 10:05:05
【问题描述】:

我正在使用 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)];

}

这里,图片大小是iphone的2*ScreenWidth(480*2),就是这样。

【问题讨论】:

    标签: cocos2d-iphone


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,我明白你的回答。我的图像是在没有像素的情况下计算的吗?我想按像素缩放我的图像。那么上面的代码不是按像素计算的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    相关资源
    最近更新 更多