如何防止在暂停场景上运行SKAction(取消暂停后),暂停/取消暂停场景后节点的纹理不会改变 [英] How to prevent run SKAction on paused scene (after unpaused), texture of node not change after pause/unpause scene
问题描述
暂停和取消暂停场景有两个问题。我有按钮:
I have two problems with pausing and unpausing scene. I have button:
playPause = SKSpriteNode(imageNamed: "buttPause.png")
playPause.name = "pause"
playPause.setScale (0.65)
playPause.position = CGPoint(x: -self.frame.width / 2.55 , y: self.frame.height / 2.27)
playPause.zPosition = 10
self.addChild(playPause)
我设置暂停功能并取消暂停场景+更改按钮的纹理:
I have set function to pause and unpause scene + change texture of button:
func buttonpauseplayTouched() {
if isPlaying {
playPause.texture = SKTexture(imageNamed: "buttPlay")
isPlaying = false
self.scene?.view?.isPaused = true
}
else {
playPause.texture = SKTexture(imageNamed: "buttPause")
isPlaying = true
self.scene?.view?.isPaused = false
}
}
我设置了触摸按钮:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
location = touch.location(in: self)
node = self.atPoint(location)
if node.name == "pause" {
buttonpauseplayTouched()
}
else {print ("Blank space")}
}
}
现在,当我触摸暂停按钮时,我可以暂停和取消暂停场景,但纹理不会改变?哪里不对?或者如果我想在暂停时将其他spritekitnode添加到场景中,我不能。
Now when I touch pause button, I can pause and unpause scene, but texture not change? What is wrong? Or if I want to add other spritekitnode to scene when is paused, I can not.
第二个问题是,我在场景中有其他一些SKSpriteNodes并且我已经设置了动作当我触摸它们时如果我在场景暂停时触摸它们,则不会发生任何事情,但是当我取消暂停场景时,对象上的动作就会运行。当场景暂停时,如何防止我无法对对象执行操作。我尝试:
Second problem is, that I have some other SKSpriteNodes on scene and I have set action when I touch them. If I touch them while scene is paused, nothing happen, but when I unpause scene, action on object run. How to prevent, when is scene paused, that I cannot perform action on object. I try :
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
location = touch.location(in: self)
node = self.atPoint(location)
if node.name == "pause" {
buttonpauseplayTouched()
}
else if scene?.view?.isPaused == true && node.name == "object" {print ("Nothing!!")}
}
else {print ("Blank space")}
}
}
没有成功。感谢您的任何提示。
Without success. Thanks for any tip.
更新:
再次感谢你们两位!
使用图层的解决方案更好,我尝试它并且工作正常!一个小问题是移动背景:
Thanks both of you again! Solution with layers is better, I try it and it works fine! One little problem is with moving background:
override func didMove(to view: SKView) {
createBackground()
}
func createBackground(){
for i in 0...3 {
background = SKSpriteNode(imageNamed: "background1.png")
background.name = "background"
background.setScale(0.694)
background.position = CGPoint(x: 0, y: CGFloat(i) * background.size.height)
background.zPosition = 1
gameLayer.addChild(background)
}
}
func moveBackground(){
gameLayer.enumerateChildNodes(withName: "background", using: ({
(node, error) in
node.position.y -= 7
if node.position.y < -((self.background.size.height)) {
node.position.y += (self.background.size.height) * 3
}
}))
}
override func update(_ currentTime: TimeInterval) {
moveBackground()
}
当我暂停gameLayer时,背景仍在移动。如何在gameLayer暂停时编辑代码以停止移动bacground?我希望只有很少的代码更改才能解决这个问题。谢谢!
When I pause gameLayer, background still moving. How to edit code to stop move bacground when is gameLayer paused? I hope that only little change of code solve this. Thanks!
推荐答案
我把控件放在他们自己的图层(SKNode)controlsLayer.addChild(pauseButton)和他们自己图层上的游戏对象上 gameLayer然后当我想暂停游戏时,我只是暂停游戏层(gameLayer.isPaused = true)。这会阻止游戏对象移动,给出暂停的外观,但仍允许我执行操作,添加对象等操作。
I put my controls on their own layer (SKNode) controlsLayer.addChild(pauseButton) and game objects on their own layer "gameLayer" then when I want to pause the game, I just pause the gameLayer (gameLayer.isPaused = true). This stops the game objects from moving, gives the appearance of being paused but still allows me to things like actions, add objects etc.
override func update(_ currentTime: TimeInterval) {
if !gameLayer.isPaused {
moveBackground()
}
}
这篇关于如何防止在暂停场景上运行SKAction(取消暂停后),暂停/取消暂停场景后节点的纹理不会改变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!