【问题标题】:I'm trying to create an infinite vertical scrolling background with SpirteKit, however I can't seem to get the code to work我正在尝试使用 SpirteKit 创建一个无限的垂直滚动背景,但是我似乎无法让代码工作
【发布时间】:2019-04-09 01:24:07
【问题描述】:

循环的时间不正确并且重置太快。循环图像也被截断,仅显示其中的一部分,而不是缝合到前一个图像的完整循环背景图像。

我尝试过使用 .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 设备。

【问题讨论】:

  • 你使用的宽度是指高度
  • 那是我的错,在我将该值更改为高度之前复制了旧代码。但它仍然没有解决它。

标签: swift xcode sprite-kit


【解决方案1】:

你的第一个 BG 在 y = 0,你的第二个 BG 在 y = height。我假设您在锚点 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)
    }

【讨论】:

  • 感谢您的详细回复!您的建议有助于对齐图像并填充屏幕,但循环仍然混乱,我不明白为什么。这是正在发生的事情的一个小片段。 i.imgur.com/w4TdINY.mp4 从顶部可以看到,环没有缝合在一起,环仍然跳动。另外,如果有帮助,我的锚点位于 0.0 0.0。
  • 我猜这是因为您使用的所有不同尺寸。我会尝试简化您的代码,使您的背景和场景大小相同
  • 是的,这是有道理的。也请原谅我的无知,因为我是编码新手,但如果我需要背景与场景大小相同,我将如何让它在所有 iPhone 设备上工作,在这种情况下,不是 iPhone 5S?我的资源库中有多个不同大小的纹理?
  • 场景缩放到不同的设备。这就是方面填充的作用
猜你喜欢
  • 2022-12-24
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
  • 1970-01-01
相关资源
最近更新 更多