Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:暂停无限滚动背景(即无限循环)_Swift_Loops_Sprite Kit_Sprite_Pause - Fatal编程技术网

Swift:暂停无限滚动背景(即无限循环)

Swift:暂停无限滚动背景(即无限循环),swift,loops,sprite-kit,sprite,pause,Swift,Loops,Sprite Kit,Sprite,Pause,在我的游戏中,当调用“endGame”函数时,我希望某些东西暂停,而其他东西保持运行。我已经能够通过使用“暂停”布尔值在大多数操作中实现这一点,但是我无法让它在我的滚动背景下工作。我知道问题与背景动作如何包含在for循环中有关,但我不确定如何解决这个问题。下面是我的代码示例: class GameScene: SKScene { var sun = SKSpriteNode() var background = SKSpriteNode() override func didMoveToVi

在我的游戏中,当调用“endGame”函数时,我希望某些东西暂停,而其他东西保持运行。我已经能够通过使用“暂停”布尔值在大多数操作中实现这一点,但是我无法让它在我的滚动背景下工作。我知道问题与背景动作如何包含在for循环中有关,但我不确定如何解决这个问题。下面是我的代码示例:

class GameScene: SKScene {

var sun = SKSpriteNode()
var background = SKSpriteNode()

override func didMoveToView(view: SKView) {

sun = SKSpriteNode(imageNamed: "Sun")
    sun.zPosition = -2
    sun.setScale(0.8)
    sun.position = CGPoint(x: self.frame.size.width * 0.632, y: self.frame.size.height * 0.90)
    let rotate = SKAction.rotateByAngle(CGFloat(M_PI_2), duration: NSTimeInterval(10))
    let rotateForever = SKAction.repeatActionForever(rotate)
    sun.runAction(rotateForever)
    addChild(sun)

let backgroundTexture = SKTexture(imageNamed: "Background")
    backgroundTexture.filteringMode = .Nearest

    let moveBackground = SKAction.moveByX(-backgroundTexture.size().width, y: 0, duration: NSTimeInterval(0.004 * backgroundTexture.size().width * 2.0))
    let resetBackground = SKAction.moveByX(backgroundTexture.size().width, y: 0, duration: 0.0)
    let moveBackgroundForever = SKAction.repeatActionForever(SKAction.sequence([moveBackground,resetBackground]))

    for var i:CGFloat = 0; i < 4.0 + self.frame.size.width / ( backgroundTexture.size().width ); ++i {
        background = SKSpriteNode(texture: backgroundTexture)
        background.setScale(0.5)
        background.zPosition = -1
        background.position = CGPointMake(i * background.size.width, backgroundVert)
        background.runAction(moveBackgroundForever)
        addChild(background)
    }
}

func endGame {
sun.paused = true
background.paused = true
}
}
class游戏场景:SKScene{
var sun=SKSpriteNode()
var background=SKSpriteNode()
覆盖func didMoveToView(视图:SKView){
sun=SKSpriteNode(图像名称:“sun”)
sun.zPosition=-2
太阳刻度(0.8)
sun.position=CGPoint(x:self.frame.size.width*0.632,y:self.frame.size.height*0.90)
让rotate=SKAction.rotateByAngle(CGFloat(M_PI_2),持续时间:NSTimeInterval(10))
让RotateForver=SKAction.repeatActionForever(旋转)
sun.runAction(RotateForver)
addChild(sun)
让backgroundTexture=SKTexture(图像名为:“背景”)
backgroundTexture.filteringMode=.Nearest
让moveBackground=SKAction.moveByX(-backgroundTexture.size().width,y:0,duration:NSTimeInterval(0.004*backgroundTexture.size().width*2.0))
让resetBackground=SKAction.moveByX(backgroundTexture.size().width,y:0,duration:0.0)
让moveBackgroundForever=SKAction.repeatActionForever(SKAction.sequence([moveBackground,resetBackground]))
对于变量i:CGFloat=0;i<4.0+self.frame.size.width/(backgroundTexture.size().width);+i{
背景=SKSpriteNode(纹理:backgroundTexture)
背景设置刻度(0.5)
background.zPosition=-1
background.position=CGPointMake(i*background.size.width,backgroundVert)
background.runAction(moveBackgroundForever)
addChild(背景)
}
}
func终局{
sun.pause=true
background.paused=true
}
}

在本例中,“暂停”布尔值适用于称为“太阳”的旋转SKSpriteNode,但不适用于背景。有什么想法吗

看起来您正在for循环中创建多个背景。但是您只暂停了一个。

您应该做的是为背景精灵创建1个
SKNode
,将所有背景节点添加到此节点,然后将主节点添加到场景中。然后,当需要暂停时,只暂停主节点,然后主节点将暂停其所有子节点

for var i:CGFloat = 0; i < 4.0 + self.frame.size.width / (backgroundTexture.size().width ); ++i {
    var background = SKSpriteNode(texture: backgroundTexture)
    background.setScale(0.5)
    background.zPosition = -1
    background.position = CGPointMake(i * background.size.width, backgroundVert)
    background.runAction(moveBackgroundForever)
    self.background.addChild(background)
}
addChild(background)
var i的
:CGFloat=0;i<4.0+self.frame.size.width/(backgroundTexture.size().width)++我{
var background=SKSpriteNode(纹理:backgroundTexture)
背景设置刻度(0.5)
background.zPosition=-1
background.position=CGPointMake(i*background.size.width,backgroundVert)
background.runAction(moveBackgroundForever)
self.background.addChild(后台)
}
addChild(背景)