滚动背景在图像之间创建间隙 - Swift

Posted

技术标签:

【中文标题】滚动背景在图像之间创建间隙 - Swift【英文标题】:Scrolling Background creating a gap between images - Swift 【发布时间】:2014-10-15 21:34:58 【问题描述】:

我用 2 张图片创建了一个无限滚动的背景。随着滚动速度的增加,图像之间开始出现间隙。这是我的代码:

 override func update(currentTime: CFTimeInterval) 

    var fallingSpeed = 4 + speedIncrease

    background.position.y = background.position.y - fallingSpeed
    background2.position.y = background2.position.y - fallingSpeed

    if background.position.y <= 0 
        background.position.y = size.height*2 - (fallingSpeed)

    
    if background2.position.y <= 0 
        background2.position.y = size.height*2 - (fallingSpeed)

    

每次用户点击屏幕时,speedIncrease 都会增加 +.1,因为我希望背景随着游戏的进行移动得更快。 两个背景是相同的图像和大小。

只有在 speedIncrease 增加时才会出现差距。 speedIncrease 最初设置为 0,背景平滑滚动,没有间隙。当我开始点击屏幕并增加 speedIncrease 时,就会出现间隙。

关于如何消除差距有什么建议吗?我对 Swift 和 Obj-C 还很陌生,所以对初学者的任何建议都将非常感激。

【问题讨论】:

【参考方案1】:

我遇到了类似的问题,并设法通过将我的位置设置为具有整个像素(整数)值的 CGPoint 来解决它。我的假设是你的问题是相似的,并且是因为你的背景是在一个像素的分数处绘制的。

由于您只是更改 position.y,因此您需要一个 CGFloat,因此您可以简单地将数字四舍五入:background.position.y = round(some_CGFloat) 对于 Retina (@2x) 屏幕,像素实际上位于 position.y 的每 0.5 倍上。在这种情况下,您可以这样做:background.position.y = round(some_CGFloat * 2.0) / 2.0

试试下面的代码(假设 Retina 显示器):

override func update(currentTime: CFTimeInterval) 

  var fallingSpeed = 4 + speedIncrease

  background.position.y = round((background.position.y - fallingSpeed) * 2.0) / 2.0
  background2.position.y = round((background2.position.y - fallingSpeed) * 2.0) / 2.0

  if background.position.y <= 0 
    background.position.y = round((size.height * 2 - fallingSpeed) * 2.0) / 2.0
  
  if background2.position.y <= 0 
    background2.position.y = round((size.height * 2 - fallingSpeed) * 2.0) / 2.0
  

我确实意识到这是一个较老的问题,但我希望它可以帮助有类似问题的人。

【讨论】:

以上是关于滚动背景在图像之间创建间隙 - Swift的主要内容,如果未能解决你的问题,请参考以下文章

从右到左滚动背景 Swift / Sprite Kit

滚动时,iPad 上的全屏背景会变成空白

在视图控制器/页面视图控制器中使图像视图全屏显示(swift)

带有透明单元格并显示背景图像的 Swift 表格视图

将背景图像加载为视图时出现小的白色间隙

如何在滚动内容中使用 100% CSS 背景图像?