Ios 重新启动精灵套件游戏Swift

Ios 重新启动精灵套件游戏Swift,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我用SpriteKit创建了一个简单的2D街机游戏,我正在尝试添加一个计分系统。基本上,这个游戏是一个方形的精灵,它必须跳过各种障碍物。所以我想要的是当玩家接触到这个对象时,整个游戏重新开始。游戏会检测到接触(我之前测试过),但是当我移除所有的孩子,然后运行游戏的基本主功能时,我注意到旧的对象会不断生成,并相互混杂 func didBegin(_ contact: SKPhysicsContact) { if (contact.bodyA.categoryBitMask == Phys

我用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函数


`

首先,你应该检查两种情况,玩家是联系人A还是联系人B。
其次,您应该将要移除的对象(让我们说是障碍物)指定给一个变量,例如,让我们说对象是障碍物,然后:contact.bodyB.node.removeFromParent(),您将成功移除该对象。

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

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,一旦游戏重置,它就会变得可见,甚至是另一个场景。

我想我不是很清楚。我的目标是完全重新开始我的游戏。我不只是想消除给定的障碍,而是想消除一切。至于另一个联系人案例,我已经在我的代码中实现了它,但我只是没有将它作为我的问题的一部分添加,所以在这种情况下它看起来更整洁。你可以在游戏场景中这样做:let newGame=gamese(size:self.size)newGame.viewController=self.viewController.viewController.currentGame=newGame-self.changePlayer()newGame.currentPlayer=self.currentPlayer-let transition=SKTransition.douthood(持续时间:1.5)self.view?.presentScene(新游戏,transition:transition)我很抱歉,但我不理解你的问题:不清楚你是想实现一个简单的游戏还是生命的损失(例如,你应该回到以前的情况而不重新加载整个场景)。无论如何,如果你想结束游戏,你应该遵循Nik的答案,否则你应该修正你的属性来代表一个旧的状态。你不应该在didbeagin(_contact)中这样做,因为它可能会被调用很多次(你的代码是错误的…)好的,非常感谢。我相信你所说的被多次调用是错误的。这就是我建议重置的方式,它允许你重新开始一个新的游戏,这意味着没有以前的游戏数据可以带入新游戏并破坏游戏state@Confused在游戏场景中,无论你想在哪里重新启动场景?@无论你已经在哪个场景中(并且想重新启动),干杯。这就是让我困惑的部分。