gpt4 book ai didi

ios - 如何防止在暂停场景(取消暂停后)上运行 SKAction,节点纹理在暂停/取消暂停场景后不会改变

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:35 24 4
gpt4 key购买 nike

我有两个关于暂停和取消暂停场景的问题。我有按钮:

    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)

我已经设置了暂停和取消暂停场景的功能+改变按钮的纹理:

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 添加到场景中,我不能。

第二个问题是,我在场景中还有其他一些 SKSpriteNode,并且我在触摸它们时设置了 Action 。如果我在场景暂停时触摸它们,什么也不会发生,但是当我取消暂停场景时,对象运行的 Action 。如何防止场景暂停时我无法对对象执行操作。我试试:

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")}
}

}

没有成功。感谢您的任何提示。

更新:

再次感谢你们!分层解决方案更好,我尝试了一下,效果很好!移动背景有一个小问题:

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 暂停时如何编辑代码以停止移动背景?我希望只需稍微更改代码即可解决此问题。谢谢!

最佳答案

我将控件放在它们自己的层 (SKNode) controlsLayer.addChild(pauseButton) 上,将游戏对象放在它们自己的层“gameLayer”上,然后当我想暂停游戏时,我只需暂停 gameLayer (gameLayer.isPaused = true ).这会阻止游戏对象移动,给人以暂停的感觉,但仍然允许我执行操作、添加对象等操作。

override func update(_ currentTime: TimeInterval) {

if !gameLayer.isPaused {
moveBackground()
}
}

关于ios - 如何防止在暂停场景(取消暂停后)上运行 SKAction,节点纹理在暂停/取消暂停场景后不会改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42935004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com