循环移动的背景 Objective-C

3
我正在测试一项背景循环动画,其中将有两个尺寸为1024x768像素的图像向左移动,并超出屏幕,然后跳回到另一侧并重复此过程。
我已经成功创建了两个背景图像的匀速移动(成功),然后我尝试使用以下代码使其跳跃,但出现了问题:
    if((background.center.x) < -511){
        background.center = CGPointMake(1536, background.center.y);
    }

    if((background2.center.x) < -511){
        background2.center = CGPointMake(1536, background2.center.y);
    }

一些问题出现了,跟我的预期不太一样。每次都会留下几个像素的间隙,我很困惑这是为什么。有没有人知道是什么原因导致这种情况发生,以及如何解决?谢谢!


iOS和常速变量为10。 - Ninjiangstar
2个回答

1

看起来你忘记考虑移动的距离了。大于表达式可能已经被触发,因为你移动得太远了。我猜你的移动量大于1像素/帧。

我不确定是什么样的值在影响你的移动,但我认为要考虑到移动,你应该做一些像...

 if ((background.center.x) < -511){
    CGFloat dist = background.center.x + 512;
    background.center = CGPointMake(1536+dist, background.center.y);
 }

 if ((background2.center.x) < -511){
    CGFloat dist = background2.center.x + 512;
    background2.center = CGPointMake(1536+dist, background2.center.y);
 } 

0

与其让这两个图像(在某种程度上)独立移动,我会跟踪一个单一的backgroundPosition变量,并且不断更新两个图像相对于该位置的位置。这样应该能保持一切井然有序:

CGFloat const backgroundWidth = 1024;
CGFloat const backgroundSpeed = 2;

- (void)animateBackground {
    backgroundPosition -= backgroundSpeed;
    if (backgroundPosition < 0) {
        backgroundPosition += backgroundWidth;
    }
    background1.center.x = backgroundPosition - backgroundWidth/2;
    background2.center.x = backgroundPosition + backgroundWidth/2;
}

谢谢你的回答,我根据你的答案找到了另一种解决方案...我发现这个问题是由于每帧像素位移引起的,因为我的常数是10,所以我从512中减去了10,这是1024的一半,这样它就会在触及另一侧之前向另一侧移动10像素,因为那10像素将在下一帧消失,这解决了问题。非常感谢! :) - Ninjiangstar
我们这里都是关于解决方案的。很高兴听到你解决了它!:) - e.James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接