gpt4 book ai didi

ios - 按下按钮时无法使用 Swift 3 更新 SKLabel 节点

转载 作者:搜寻专家 更新时间:2023-11-01 07:19:01 25 4
gpt4 key购买 nike

我正在尝试使用 SpriteKit 制作一个小游戏。 (适用于 iOS 10 的 Xcode 8 和 Swift 3)

我想让用户在触摸暂停文本标签时暂停游戏。当他这样做时,我想暂停游戏并将标签文本更改为取消暂停。

下面是我的那部分代码。

if ( pauseTextLabel.contains(touchLocation!)){
gameLoopPaused = !gameLoopPaused;
if ( pauseTextLabel.text == "Pause" ){
// pauseTextLabel.text = "Unpause";
pauseTextLabel = SKLabelNode(fontNamed: gameData.fontName);
initLabel(label: pauseTextLabel, gameData: gameData, text: "Unpause", pos: CGPoint(x: 3 * self.size.width/4 , y: self.size.height - 50 ) );
self.addChild(pauseTextLabel);
runPauseAction();
} else {
pauseTextLabel.text = "Pause";
runUnpauseAction();
}
}

我先尝试这样做,但没有成功。

if ( pauseTextLabel.contains(touchLocation!)){
gameLoopPaused = !gameLoopPaused;
if ( pauseTextLabel.text == "Pause" ){
pauseTextLabel.text = "Unpause";
runPauseAction();
} else {
pauseTextLabel.text = "Pause";
runUnpauseAction();
}
}

我在那个 block 之前添加了一个断点,这个 block 在控制台中没有显示任何消息。游戏正在暂停,我可以继续玩。然而,唯一不起作用的是显示文本更新。我试图将其删除并将其添加到 View 中。它没有用。

非常感谢任何帮助或提示出了什么问题。

编辑:我按照建议修改了 touchesBegan。我包括我的 runPauseAction() 以在重要的情况下提供更多信息。

private func runPauseAction(){
print(#function);

//self.pauseTextLabel.text = "Resume";
self.view?.isPaused = true;
self.physicsWorld.speed = 0.0;

}

最佳答案

你是在暂停整个场景/skView吗

runPauseAction()

?

尝试使用 SKAction 延迟调用暂停代码,例如在更改文本标签后 0.1 秒。

同时在文本标签更改之前添加 unpause 方法。

runUnpauseAction()
pauseTextLabel.text = "Pause"

我建议您在 gameScene 中创建一个 worldNode 用于暂停。

let worldNode = SKNode()

将它添加到场景中

addChild(worldNode)

然后将您需要暂停的所有内容添加到该 worldNode

worldNode.addChild(SOMENODE)
worldNode.addChild(SOMENODE2)

比起你暂停时你称之为

 worldNode.isPaused = true
physicsWorld.speed = 0

当你恢复时你调用它

 worldNode.isPaused = false
physicsWorld.speed = 1

这是一种更好的暂停游戏的方式,Apple 在 DemoBots 中也这样做。当游戏暂停时,它还可以让您更灵活地执行操作,例如叠加菜单节点。

我也会这样写你的 touches 方法。

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
let node = atPoint(location)

if node == pauseTextLabel {
if !gameLoopPaused {
gameLoopPaused = true
pauseTextLabel.text = "Unpause"
runPauseAction()
} else {
runUnpauseAction()
gameLoopPaused = false
pauseTextLabel.text = "Pause"
}
}
}
}

希望对你有帮助

关于ios - 按下按钮时无法使用 Swift 3 更新 SKLabel 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066495/

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