我使用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功能
`
答案 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()你将成功删除对象