Swift 斯威夫特精灵套装中的“永远停止重复动作”
我创建了一个SKAction,它可以重复Sforver(这是行星旋转)。但我想在着陆器降落到着陆台上后立即停止。到目前为止,我的代码不起作用。我尝试了removeAllActions()和removeActionForKey,如您所见。接触检测工作得很好,还有一堆代码没有显示,包括碰撞委托等Swift 斯威夫特精灵套装中的“永远停止重复动作”,swift,sprite-kit,Swift,Sprite Kit,我创建了一个SKAction,它可以重复Sforver(这是行星旋转)。但我想在着陆器降落到着陆台上后立即停止。到目前为止,我的代码不起作用。我尝试了removeAllActions()和removeActionForKey,如您所见。接触检测工作得很好,还有一堆代码没有显示,包括碰撞委托等 func createPlanet() { var planet = SKSpriteNode() planet.zPosition = 1 planet.name = "mar
func createPlanet() {
var planet = SKSpriteNode()
planet.zPosition = 1
planet.name = "mars"
redPlanet = SKSpriteNode(imageNamed: "redPlanet")
redPlanet.name = "red"
redPlanet.zPosition = 2
redPlanet.physicsBody = SKPhysicsBody(texture: redPlanet.texture!, size: size)
redPlanet.physicsBody!.dynamic = false
redPlanet.physicsBody!.categoryBitMask = planetMask
redPlanet.physicsBody!.contactTestBitMask = 0
planet.addChild(redPlanet)
landingPad = SKSpriteNode(imageNamed: "landingPad")
landingPad.name = "pad"
landingPad.zPosition = 3
landingPad.position = CGPoint(x: 0, y: redPlanet.size.height / 2 - 60)
landingPad.physicsBody = SKPhysicsBody(rectangleOfSize: landingPad.size)
landingPad.physicsBody!.dynamic = false
landingPad.physicsBody!.categoryBitMask = landingPadMask
landingPad.physicsBody!.collisionBitMask = landerMask
landingPad.physicsBody!.contactTestBitMask = landerMask
planet.addChild(landingPad)
planet.position = CGPoint(x: frame.size.width / 2, y: -redPlanet.size.height / 6)
let spinner = SKAction.rotateByAngle(CGFloat(M_PI), duration: 3)
planet.runAction(SKAction.repeatActionForever(spinner), withKey: "planetSpin")
addChild(planet)
}
而这个
func didBeginContact(contact: SKPhysicsContact) {
if !hasLanded {
if contact.bodyA.node!.name == "lander" {
hasLanded = true
print("bodyA contact")
physicsWorld.speed = 0
removeAllActions()
removeActionForKey("planetSpin")
} else if contact.bodyB.node!.name == "lander" {
print("bodyB contact")
hasLanded = true
physicsWorld.speed = 0
removeAllActions()
removeActionForKey("planetSpin")
}
}
}
您不是从行星节点删除动作,而是从场景或父节点或您的
didBeginContact
所属的任何节点删除动作
将
planet
设为类变量,并在didBeginContact
中调用planet.removeAllActions()
,这就是答案。谢谢