我在解决此问题时遇到了麻烦,并且对此感到非常沮丧。
我在游戏场景中有一个暂停按钮和一个非暂停按钮,以允许玩家暂停游戏,以下代码
else if (node == pauseButton) {
pauseButton.removeFromParent()
addChild(unpauseButton)
addChild(restartButton)
self.runAction (SKAction.runBlock(self.pauseGame))
}
func pauseGame(){
pauseButton.hidden = true
unpauseButton.hidden = false
scene!.view!.paused = true // to pause the game
}
问题
问题是当我暂停游戏然后取消暂停游戏时,我的玩家精灵似乎会自动向前移动两个空格
我还具有点击和滑动手势,当我在屏幕上的任意位置点击时,可以使播放器左右左右移动。
func tapUp(){
let amountToMove:CGFloat = levelUnitHeight
let move:SKAction = SKAction.moveByX(0, y: amountToMove, duration: 0.1)
menubutton.hidden = true
settingsButton.hidden = true
highscoreLabel.hidden = true
pauseButton.hidden = false
thePlayer.runAction(move)
}
func swipedRight(){
let amountToMove:CGFloat = levelUnitHeight
let move:SKAction = SKAction.moveByX(amountToMove, y: 0, duration: 0.1)
thePlayer.runAction(move) // links the action with the players
}
正如我上面的成员所说,玩家实际上并没有移动2个空格。
另外,您可能应该在暂停游戏时更改策略,因为暂停scene.view使得以后添加SpriteKit元素非常困难。
我认为一种更好的方法是在GameScene中创建一个worldNode并将所有需要暂停的精灵添加到该worldNode中。基本上,您可以更灵活地暂停节点而不是整个场景。
首先创建一个世界节点属性
let worldNode = SKNode()
并将其添加到ViewDidLoad中的场景
addChild(worldNode)
比将您需要暂停的所有精灵添加到worldNode
worldNode.addChild(sprite1)
worldNode.addChild(sprite2)
...
为游戏状态创建一个全局枚举
enum GameState {
case Playing
case Paused
case GameOver
static var current = GameState.Playing
}
比在游戏场景中暂停和恢复功能
func pause() {
GameState.current = .Paused
// show pause menu etc
}
func resume() {
GameState.current = .Playing
self.physicsWorld.speed = 1
worldNode.paused = false
}
最后,将实际的暂停代码添加到您的updateMethod中。这样,即使spriteKit本身尝试恢复(例如,重新打开的应用程序,关闭的警报等),它也不会恢复游戏。
override func update(currentTime: CFTimeInterval) {
if GameState.current == .Paused {
self.physicsWorld.speed = 0
worldNode.paused = true
}
}
关于tapGesture识别器,在点击之后被调用的方法中,您可以将其添加到其余代码之前
guard GameState.current != .Paused else { return }
....
希望这可以帮助
问题内容: 我声明我已阅读有关线程的内容,但从未使用过。所以我问你:) 我有两个线程:和,其中管理GUI和逻辑。 我将从开始。 然后在绘制GUI时,我将其暂停,以等待到达X点的run方法。 当到达X点进入run方法时,我暂停并继续。 并共享一些变量来管理GUI和逻辑… 我可以做吗?如果是,如何?:) 问题答案: 使用和方法: -使当前线程等待,直到另一个线程调用 该对象的方法。 -唤醒正在该对象的
问题内容: 我想暂停Docker容器并稍后再恢复。如何才能做到这一点?通过挂起,我的意思是它应该保存正在进行的过程的状态(例如,视频编码),然后随时将其恢复。 问题答案: 从0.12.0版开始,Docker支持和命令使用cgroup freezer暂停和恢复容器。
暂停脚本的当前线程。 #p::Pause ; 按一次 Win+P 会暂停脚本. 再按一次则取消暂停. Pause [, On|Off|Toggle, OperateOnUnderlyingThread?] 参数 On|Off|Toggle 如果为空或省略, 则它默认为 Toggle. 否则, 请指定下列单词的其中一个: Toggle:如果在当前线程下的潜在线程处于运行状态,则暂停当前线程,否则让潜
我正在使用这个库来实现节点kafka与消费者暂停和恢复方法来处理背压。我已经创建了一个小演示,我可以在其中和,但问题是在后它停止了消费消息。 这是我的代码。 任何人都可以帮助我,我在恢复消费者时做错了什么?当我启动使用者时,它只接收一条消息,并且在恢复后仍然不消耗任何其他消息。
我正在调试一个有很多线程的应用程序。我的断点设置为挂起整个VM。 当一个线程碰到其中一个断点时,我想使用步骤结束。但是这似乎会恢复整个虚拟机,直到该步骤完成。 如果我能单步执行到达断点的单线程,那将非常有帮助。 在IntelliJ 11.1/Java 6中有什么方法可以做到这一点吗?(希望我没有漏掉什么明显的东西……)
我有一个Android应用程序,它使用谷歌admob网络显示间隙广告。admob的优点是,它的活动是独立的。我可以在我的MainActivity中加载广告,只要admob准备好了广告,它就会显示出来,即使我不再在MainActivity中。我已经使用了isLoaded()方法来显示广告,这占了90%的时间。 但其他10%的情况并非如此。有些活动应该保持无广告状态,因为广告会降低游戏质量。如果手机速