循环移动背景目标-C

时间:2011-10-02 01:10:03

标签: objective-c cocoa-touch animation

我正在测试一个背景循环动画,其中尺寸为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);
    }

不知怎的,这不符合我的预期。它每次都留下几个像素的间隙,我很困惑为什么。有谁知道导致这种情况发生的原因以及如何解决这个问题?谢谢!

2 个答案:

答案 0 :(得分: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);
 } 

答案 1 :(得分: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;
}