滚动背景创建图像之间的差距 - 斯威夫特

时间:2014-10-15 21:34:59

标签: ios xcode swift

我在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 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,并设法通过将我的位置设置为具有全像素(整数)值的CGPoint来修复它。我的假设是你的问题很相似,并且是因为你的背景是以像素的一小部分绘制的。

由于你只是改变了position.y,你需要一个CGFloat,所以你可以简单地对数字进行舍入:background.position.y = round(some_CGFloat) 对于Retina(@ 2x)屏幕,像素实际上位于每个位置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
  }
}

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