我正在测试一个背景循环动画,其中尺寸为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);
}
不知怎的,这不符合我的预期。它每次都留下几个像素的间隙,我很困惑为什么。有谁知道导致这种情况发生的原因以及如何解决这个问题?谢谢!
答案 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;
}