【问题标题】:How to make scrolling background horzintally in portrait mode in spritekit如何在 spritekit 中以纵向模式水平滚动背景
【发布时间】:2016-06-06 19:10:48
【问题描述】:

我想在手机处于纵向模式时制作滚动背景我尝试了这些代码,但在纵向模式下它没有帮助我

let background1 = SKSpriteNode(imageNamed: "space")
let background2 = SKSpriteNode(imageNamed: "space")

在“didMoveToView”方法中

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)

在“覆盖函数更新方法”中

  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) 
}

问题是当背景滚动时背景之间存在间隙,任何帮助将不胜感激

【问题讨论】:

    标签: ios xcode swift sprite-kit


    【解决方案1】:

    我想说的是,X = (1,2) 导致了您的问题:

    backgroundX.size = CGSize(width: frame.width, height: frame.height)
    

    您将背景纹理的大小设置为场景帧的大小,覆盖从纹理源继承的原始大小,并且需要正确计算其新位置。

    【讨论】:

    • 我试图删除该行但没有影响问题
    • 那么你用来定位精灵的逻辑可能有问题,你清楚无休止的滚动是如何工作的吗?例如。是什么触发了背景精灵的交换重新定位?也许你在if(backgroundX.position.x &lt; -backgroundX.size.width) 测试中遗漏了一些东西,比如/2
    【解决方案2】:

    您遇到了一些错误,例如使用高度来计算 background2 的 x 位置。这应该会让你朝着正确的方向前进......

    didMoveToView

    background1.size = CGSize(width: frame.width, height: frame.height)
    background1.anchorPoint = CGPointZero
    background1.position = CGPointZero
    background1.zPosition = 0
    self.addChild(background1)
    
    background2.size = CGSize(width: frame.width, height: frame.height)
    background2.anchorPoint = CGPointZero
    background2.position = CGPoint(x: background2.size.width, y: 0)
    background2.zPosition = 0
    self.addChild(background2)
    

    更新

    background1.position = CGPoint(x: background1.position.x - 2, y: background1.position.y)
    background2.position = CGPoint(x: background2.position.x - 2, y: background2.position.y)
    
    if (background1.position.x <= -background1.size.width) {
       background1.position = CGPoint(x: background1.position.x + background1.size.width * 2, y: 0)
    }
    if (background2.position.x <= -background2.size.width) {
       background2.position = CGPoint(x: background2.position.x + background1.size.width * 2, y: 0)
    }
    

    在gameViewController中,在呈现场景之前,你可能还需要添加

    scene.size = view.bounds.size
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多