Я пытаюсь создать бесконечный вертикальный фон прокрутки с помощью SpirteKit, однако я не могу заставить код работать - PullRequest
0 голосов
/ 09 апреля 2019

Цикл не рассчитан по времени и сбрасывается слишком быстро.Зацикленное изображение также обрезается, показывая только его часть, а не полностью зацикленное фоновое изображение, сшитое с предыдущим.

Я попытался поиграться со значениями .position, .size и SKAction., но я просто не могу настроить его там, где он работает должным образом.

func scrollingBackground() {
    let BGTexture = SKTexture(imageNamed: "Background")

    for i in 0 ... 1 {
        let background = SKSpriteNode(texture: BGTexture)
        background.zPosition = -30
        background.anchorPoint = CGPoint(x: 0, y: 0)
        background.size = CGSize(width: (frame.size.width), height: (frame.size.height))
        background.position = CGPoint(x: 0, y: -BGTexture.size().height + (BGTexture.size().height + (BGTexture.size().height * CGFloat(i))))
        addChild(background)

        let scrollUp = SKAction.moveBy(x: 0, y: BGTexture.size().height, duration: 20)
        let scrollReset = SKAction.moveBy(x: 0, y: -BGTexture.size().height, duration: 0)
        let scrollLoop = SKAction.sequence([scrollUp, scrollReset])
        let scrollForever = SKAction.repeatForever(scrollLoop)

        background.run(scrollForever)
    }

Я надеялся получить бесшовную бесконечную фоновую петлю, которая работает бесконечно, а не этот беспорядочный беспорядок, который у меня сейчас есть.Я мог бы добавить, что мое фоновое изображение изначально не имеет идеального размера для устройств, но я хочу убедиться, что мой фон подходит для всех устройств iPhone.

1 Ответ

0 голосов
/ 09 апреля 2019

Ваша первая группа крови находится у = 0, вторая группа - у = высота. Я предполагаю, что вы находитесь на точке 0,5 0,5 якоря, который сделал бы высоту / 2 от экрана. Ваше действие перемещает BG 1 точно туда, где оно находится за пределами экрана, затем возвращается к 0. Ваш BG2 начинает с экрана, продолжает перемещаться за пределы экрана, затем, когда он достигает высоты 2 *, сбрасывается до высоты 1 *, таким образом, никогда не появляется на экране. экран. Это создаст вид черной полосы внизу, потому что BG2 никогда не рисуется. Вместо этого умножьте значение i на отрицательную высоту, и вместо этого BG2 появится внизу.

func scrollingBackground() {
    let BGTexture = SKTexture(imageNamed: "Background")

    for i in 0 ... 1 {
        let background = SKSpriteNode(texture: BGTexture)
        background.zPosition = -30
        background.anchorPoint = CGPoint(x: 0, y: 0)
        background.size = CGSize(width: (frame.size.width), height: (frame.size.height))
        background.position = CGPoint(x: 0, y: -BGTexture.size().height + (BGTexture.size().height + (-BGTexture.size().height * CGFloat(i))))
        addChild(background)

        let scrollUp = SKAction.moveBy(x: 0, y: BGTexture.size().height, duration: 20)
        let scrollReset = SKAction.moveBy(x: 0, y: -BGTexture.size().height, duration: 0)
        let scrollLoop = SKAction.sequence([scrollUp, scrollReset])
        let scrollForever = SKAction.repeatForever(scrollLoop)

        background.run(scrollForever)
    }
...