Sprite在暂停后取消暂停后会移动两个位置
我无法找到解决方案,并开始对此感到非常沮丧。
我的游戏场景中有一个暂停按钮和一个取消暂停按钮,允许玩家暂停游戏,这是以下代码
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
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 } ....
希望这可以帮助
- 无法在Core Data中创建只读sqlite存储:Cocoa Error 260
- 如何绘制SKNode PhysicsBody进行debugging?
- 如何自定义AppRTC来接听电话
- 视图以模态视图动画而非显示(推动)动画显示
- iOSconfiguration文件错误
- didRegisterForRemoteNotificationsWithDeviceToken永远不会调用特定的设备
- AVSpeechSynthesizer改变声音
- 在CollectionView中滚动tableView时隐藏NavigationBar?
- 在iOS上,如何禁用弹出窗口,以提醒Crashlytics Beta旧版本中的新版本和更新