视差滚动SpriteKit

时间:2014-09-06 10:41:58

标签: xcode swift

我已经在使用Objective-C的spritekit中找到了一个关于视差滚动的教程,虽然我一直试图将它移植到swift而没有太大的成功,实际上很少。

Parallax Scrolling

有没有人有任何其他教程或方法在swift中进行视差滚动。

1 个答案:

答案 0 :(得分:4)

这是启动视差背景的超级简单方法。与滑行!我希望它能帮助您理解基础知识,然后再采用更难但更有效的编码方式。  因此,我将从获得背景移动的代码开始,然后尝试复制要放置在场景中的前景或对象的代码。

//declare ground picture. If Your putting this image over the top of another image (use a png file).
    var groundImage = SKTexture(imageNamed: "background.jpg")

    //make your SKActions that will move the image across the screen. this one goes from right to left.
    var moveBackground = SKAction.moveByX(-groundImage.size().width, y: 0, duration: NSTimeInterval(0.01 * groundImage.size().width))

    //This resets the image to begin again on the right side.
    var resetBackGround = SKAction.moveByX(groundImage.size().width, y: 0, duration: 0.0)

    //this moves the image run forever and put the action in the correct sequence.
    var moveBackgoundForever = SKAction.repeatActionForever(SKAction.sequence([moveBackground, resetBackGround]))

    //then run a for loop to make the images line up end to end.
    for var i:CGFloat = 0; i<2 + self.frame.size.width / (groundImage.size().width); ++i {
        var sprite = SKSpriteNode(texture: groundImage)
        sprite.position = CGPointMake(i * sprite.size.width, sprite.size.height / 2)
        sprite.runAction(moveBackgoundForever)
        self.addChild(sprite)
    }
}
//once this is done repeat for a forground or other items but them run at a different speed.

/ *确保您的图片在视觉上端到端排列。只是重复这段代码将无法正常工作,但这是一个起点。暗示。如果您使用像简单障碍物这样的物品,那么使用动作来产生一个创造障碍的功能也许是一个很好的方法。如果有超过两个单独的视差对象,那么对这些对象使用数组将有助于提高性能。有很多方法可以解决这个问题,所以我的观点很简单:如果你不能从ObjectiveC移植它,那么在Swift中重新考虑它。祝你好运!