重启Sprite - Kit Game Swift

时间:2016-10-14 20:59:04

标签: ios swift sprite-kit

我使用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功能

`

2 个答案:

答案 0 :(得分:5)

如果您尝试重新启动某个场景,则可以显示相同的场景并重置为默认值:

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

答案 1 :(得分:2)

首先,你应该检查这两种情况,如果玩家是联系人A或者玩家是联系人B. 其次,你应该分配你要删除的对象,让我们说障碍,变量,例如让我们说对象B是障碍物,然后:contact.bodyB.node.removeFromParent()你将成功删除对象