Spritekit游戏中无尽的滚动(重复)背景 - Swift

Egg*_*ead 9 iphone xcode ios sprite-kit swift

我想为我的spritekit游戏创建一个无尽的滚动背景,iT应该包含一两个图像,它们会重复自己?我发现了这一个两个例子,但它们都是obj.C.

我不知道如何在Swift中实现这一点.是否可以手动设置速度?

Ps:我没有转换obj的技能.C进入swift(新手到Xcode dev.)

小智 5

我知道这对游戏来说已经晚了,但我也找到了如何水平地做到这一点!

从 Egg​​head 的代码开始(出色的工作!)我修改了一些内容:

    let background1 = SKSpriteNode(imageNamed: "Street_Example")
    let background2 = SKSpriteNode(imageNamed: "Street_Example")
Run Code Online (Sandbox Code Playgroud)

还:

    background1.position = CGPoint(x: frame.size.width / 2, y:frame.size.height / 2)
    background1.size = CGSize(width: frame.width, height: frame.height)
    background1.anchorPoint = CGPointZero
    background1.position = CGPointMake(0, 0)
    background1.zPosition = -15
    self.addChild(background1)

    background2.size = CGSize(width: frame.width, height: frame.height)
    background2.anchorPoint = CGPointZero
    background2.position = CGPointMake(background1.size.width - 1,0)
    background2.zPosition = -15
    self.addChild(background2)
Run Code Online (Sandbox Code Playgroud)

并更新背景的位置:

    background1.position = CGPointMake(background1.position.x-2, background1.position.y)
    background2.position = CGPointMake(background2.position.x-2, background2.position.y)
    if(background1.position.x < -background1.size.width)
    {
      background1.position = CGPointMake(background1.position.x + background2.size.width , background2.position.y)
    }
    if(background2.position.x < -background2.size.width)
    {
      background2.position = CGPointMake(background2.position.x + background1.size.height, background1.position.y) 
    }
Run Code Online (Sandbox Code Playgroud)


Egg*_*ead 4

我找到了一种方法来做到这一点,不知何故我成功地转换了这个obj. C 快速

您必须公开声明两个节点

let background1 = SKSpriteNode(imageNamed: "bg1")
let background2 = SKSpriteNode(imageNamed: "bg2") 
Run Code Online (Sandbox Code Playgroud)

在“didMoveToView”方法中

background1.anchorPoint = CGPointZero
background1.position = CGPointMake(0, 0)
background1.zPosition = -15
self.addChild(background1)

background2.anchorPoint = CGPointZero
background2.position = CGPointMake(0, background1.size.height - 1)
background2.zPosition = -15
self.addChild(background2)
Run Code Online (Sandbox Code Playgroud)

并在“override func update(currentTime: CFTimeInterval)”方法中添加

background1.position = CGPointMake(background1.position.x, background1.position.y - 2)
background2.position = CGPointMake(background2.position.x, background2.position.y - 2)

            if(background1.position.y < -background1.size.height)
            {
                background1.position = CGPointMake(background2.position.x, background1.position.y + background2.size.height )
            }

            if(background2.position.y < -background2.size.height)
            {
                background2.position = CGPointMake(background1.position.x, background2.position.y + background1.size.height)

            }
Run Code Online (Sandbox Code Playgroud)

我不知道这是否是最有效的方法。其他问题提到了For循环。但我认为这更容易。