【问题标题】:Restarting Sprite - Kit Game SwiftRestarting Sprite - Kit Game Swift
【发布时间】:2016-10-14 20:59:03
【问题描述】:

我使用 SpriteKit 创建了一个简单的 2D 街机游戏,我正在尝试添加一个评分系统。基本上,该游戏是一个必须跳过各种障碍的方形精灵。所以我想要的是当玩家接触到整个游戏重新开始的对象时。游戏检测到接触(我之前测试过),但是当我移除所有孩子然后运行游戏的基本主要功能时,我注意到旧对象不断产生并相互混乱。

func didBegin(_ contact: SKPhysicsContact) {

    if (contact.bodyA.categoryBitMask == PhysicsCategory.Player && contact.bodyB.categoryBitMask == PhysicsCategory.Obstacles ) { //case where PLAYER collides with OBSTACLE

        print("I detect Contact")

        Scorelabel.text = "0"
        scoreCounter = 0


        self.removeAllActions()
        self.removeAllChildren()

        self.setupGame()

    }

// didBeging 函数然后继续用于其他情况

`

【问题讨论】:

  • 很抱歉,我不明白你的问题:不清楚你是想完成一个简单的游戏还是失去生命(例如你应该回到以前的无需重新加载完整场景的情况)。无论如何,如果您想结束游戏,您应该遵循 Nik 的答案,否则您应该更正您的属性以表示旧状态。你不应该在 didBegin(_contact) 中这样做,因为它可能会被多次调用(你的代码是错误的..)
  • 好的,非常感谢。我相信你所说的多次调用它是错误的。

标签: ios swift sprite-kit


【解决方案1】:

如果您尝试重新启动场景,您可以只呈现相同的场景并将其重置为默认值:

let scene = GameScene(size: self.size) // Whichever scene you want to restart (and are in)
let animation = SKTransition.crossFade(withDuration: 0.5) // ...Add transition if you like
self.view?.presentScene(scene, transition: animation)

将此代码放在您所在的任何场景中并希望重新启动。当你想重启场景时应该调用它。

如果您尝试进行无缝过渡,您可能只想不显示动画(或进行交叉淡入淡出)。

或者,您可能希望通过场景/菜单创建游戏。这可能只是另一个 SKNode,一旦游戏重置甚至另一个场景就会变得可见。

【讨论】:

  • 这是我推荐的重置方式,它可以让你重新开始一个新游戏,这意味着以前的游戏数据不会延续到新游戏中并破坏状态
  • @Confused 想从哪里重启场景
  • 在游戏场景中?
  • @Confused 无论你已经在哪个场景中(并且想要重新开始)
  • 干杯。这部分让我感到困惑。
【解决方案2】:

首先,您应该检查两种情况,如果玩家是联系人 A 或玩家是否是联系人 B。 其次,您应该将要删除的对象(例如障碍物)分配给变量,例如说 Object B es the Obstacle,然后:contact.bodyB.node.removeFromParent() 并且您将成功删除对象.

【讨论】:

  • 我相信我不是很清楚。我的目标是完全重新开始我的游戏。我不只是想消除给定的障碍,而是一切。至于其他联系案例,我已经在我的代码中实现了它,但我只是没有将它作为我的问题的一部分添加,所以它看起来更整洁
  • 在这种情况下,您可以在游戏场景中这样做: let newGame = GameScene(size: self.size) newGame.viewController = self.viewController self.viewController.currentGame = newGame self.changePlayer () newGame.currentPlayer = self.currentPlayer let transition = SKTransition.doorway(withDuration: 1.5) self.view?.presentScene(newGame, transition: transition)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多