无休止的滚动背景

时间:2015-08-09 17:37:34

标签: swift sprite-kit

我试图让我的背景从右到左无限移动。

我的意思:

extraglobs

我的didMoveToView

t

我的更新功能为空。

我上传了一张在设备上运行时的样子:http://s18.postimg.org/kbn83tvmx/i_OS_Simulator_Screen_Shot_09_Aug_2015_23_33_39.png

图像仍在屏幕的一半上,图像现在也不会移动。

2 个答案:

答案 0 :(得分:1)

我要从我制作的另一款游戏中复制并粘贴我的代码。此代码永远从左右移动背景。我会尽力解释这段代码。

func createBackground () {
    var backgroundTexture = SKTexture(imageNamed: "bg")
    var moveBackgroundByX = SKAction.moveByX(-backgroundTexture.size().width, y: 0, duration: backgroundSpeed)
    var replaceBackground = SKAction.moveByX(backgroundTexture.size().width, y: 0, duration: 0)
    var moveBackgroundForever = SKAction.repeatActionForever(SKAction.sequence([moveBackgroundByX, replaceBackground]))

    for var i:CGFloat = 0; i < 3; i++ {
        background = SKSpriteNode(texture: backgroundTexture)
        background.position = CGPoint(x: backgroundTexture.size().width/2 + (backgroundTexture.size().width * i), y: CGRectGetMidY(self.frame))
        background.size.height = self.frame.height
        background.runAction(moveBackgroundForever)
        movingObjects.addChild(background)
    }
}

您需要做的是:

  1. 移动背景(moveBackgroundByX)。这会在X方向上移动背景。您需要设置持续时间。
  2. 替换background1(replaceBackground)。
  3. 永久创建一个移动background1的ACTION,然后自动替换为NO延迟。
  4. 运行一个LOOP,决定您需要多少背景。也许你可能需要超过3个。
  5. 在该循环内,调整background.position。
  6. 在SKSpriteNode实例上调用runAction。
  7. 将新的SKSpriteNode添加到您的另一个SKView中。
  8. 如果您有任何疑问,请告诉我。

答案 1 :(得分:1)

您的背景仅占用屏幕一半的原因是因为您使用的是图像的常规尺寸(以像素为单位)。您需要修改xScaleyScale属性,以使其更大。你需要的是:

background.setScale(2)

接下来,要移动背景精灵,请改用SKAction,因为您可以更好地控制时间。 update内的动作将不会是一致的,因为除非您有一个算法来准确控制update:被调用的时间,否则您将看到动作加速或减慢。要移动背景,请在didMoveToView方法之后使用看起来像这样的代码:

var backgroundMovement = SKAction.moveByX(background.size.x, y: 0, duration: someDuration)
background.runAction(background, completion: {() -> Void in
    //place background image at start again
    background.position = ...
})

如果您希望背景连续移动并以任何方式编辑它以使其看起来更好(例如让两个背景随SKAction移动),则循环此代码。希望这有帮助