2

SKEmitterNodeボタンが押されたときに停止しようとしています。この方法でノードを追加します。

let followLine = SKAction.followPath(border.CGPath, asOffset: false, orientToPath: true, duration: 2.0)
let loopAction = SKAction.repeatActionForever(followLine)
emitterNode.targetNode = scene
emitterNode.runAction(loopAction, withKey: "loop")
addChild(emitterNode)

私は自分にemitterNodeを追加しSKScene、粒子を停止したいときは、これらすべての可能な方法を試しました:

let action = SKAction.runBlock { [weak self] in
    self?.emitterNode.particleBirthRate = 0
}
emitterNode.runAction(action)


emitterNode.removeAllActions()
emitterNode.removeFromParent()


removeAllActions()


let remove = SKAction.removeFromParent()
emitterNode.removeActionForKey("loop")
emitterNode.runAction(remove)

エミッターは停止せず、アニメーションは続行します。

4

1 に答える 1

0

それは私のコードの問題であることがわかりました。コンピューター プロパティで作成されたエミッター ノードを停止しようとしていたため、アクセス時に割り当てられました。インスタンスは明らかに同じではなく、エミッタ ノードは停止していませんでした。これが私のヒントです。コンピューター プロパティの構文と、クロージャでプロパティを初期化する構文を混同しないでください。これら 2 つのコードは大きく異なります。

// Created only once
var laserButton: ParticlesLoadingButton = {
    let button = ParticlesLoadingButton(frame: CGRect(x: 100, y: 100, width: 200, height: 100))
    button.particleEffect = .Laser
    button.particleColor = UIColor.orangeColor()
    return button
}()

// Created every time it is accessed
var laserButton2: ParticlesLoadingButton {
    let button = ParticlesLoadingButton(frame: CGRect(x: 100, y: 100, width: 200, height: 100))
    button.particleEffect = .Laser
    return button
}
于 2016-02-14T19:38:28.413 に答える