1

私のゲームでは、「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
}
}

この例では、「一時停止」ブール値は、「太陽」と呼ばれる回転する SKSpriteNode に対して完全に機能しますが、背景に対しては機能しません。何かご意見は?

4

2 に答える 2

2

バックグラウンド スプライト用に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)
于 2015-12-01T16:48:21.473 に答える
0

for ループで複数の背景を作成しているようです。しかし、一時停止しているのは 1 つだけです。

于 2015-12-01T16:47:03.250 に答える