swift iOS - 当角色离开屏幕时无法重置 gameScene

swift iOS - Can't reset gameScene when character is off screen

我最近对我的第一个应用程序进行了最后的润色,但是我发现了一个让我发疯的错误!

游戏的对象是角色(一只猫),跳过障碍物还要躲避空中飞过的鸟,每有一只鸟飞过而没有接触,分数就会增加。

如果猫与鸟接触时发生接触,或者如果猫未能跳过障碍物并被推回放置虚拟接触节点的屏幕左边缘,则游戏结束。

现在的错误...一切都按预期进行,但是如果猫在半空中,当一只鸟接触时,碰撞会将猫推离可见屏幕,在这个阶段,玩家将无法重置场景通过点击屏幕,只有当猫在屏幕上可见时,您才能通过点击一次重置场景并再次播放。

这是我能想到的所有可能有用的代码,如果有人知道如何解决这个错误,请告诉我。

override func didMoveToView(view: SKView) {

//details of the cat

    cat = SKSpriteNode(texture: catTexture1)
    cat.position = CGPoint(x: self.frame.size.width / 2.2, y: self.frame.size.height / 5.1 )
    cat.runAction(run, withKey: "runningAction")
    cat.physicsBody = SKPhysicsBody(circleOfRadius: cat.size.height / 2.0)
    cat.physicsBody!.dynamic = true
    cat.physicsBody!.allowsRotation = false
    cat.physicsBody?.categoryBitMask = catCategory
    cat.physicsBody?.collisionBitMask = crowCategory | worldCategory
    cat.physicsBody?.contactTestBitMask = crowCategory | contact2Category
    cat.physicsBody!.restitution = -10

    moving.addChild(cat)

//contact node increases score when bird makes contact

    var contact = SKSpriteNode(color: UIColor.clearColor(), size: CGSizeMake(1, 450))
    contact.position = CGPoint(x: self.frame.size.width / 3.3, y: self.frame.size.height / 2.0 )
    contact.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(1, 450))
    contact.physicsBody!.dynamic = false
    contact.physicsBody!.allowsRotation = false
    contact.physicsBody?.categoryBitMask = scoreCategory
    contact.physicsBody?.contactTestBitMask = crowCategory

    self.addChild(contact)

//2nd contact node runs game over code

    var contact2 = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(1, 450))
    contact2.position = CGPoint(x: self.frame.size.width / 4.0, y: self.frame.size.height / 2.0 )
    contact2.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(1, 450))
    contact2.physicsBody!.dynamic = false
    contact2.physicsBody!.allowsRotation = false
    contact2.physicsBody?.categoryBitMask = contact2Category
    contact2.physicsBody?.contactTestBitMask = catCategory

    self.addChild(contact2)

//touch that initiates reset

override func  touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

    if ableToJump == true {
    if (moving.speed > 0){

        cat.physicsBody!.velocity = CGVectorMake(0, 0)
        cat.physicsBody!.applyImpulse(CGVectorMake(0, 30))

                } else if (canRestart) {
        resetLabelNode.hidden = true
        self.resetScene()
        }
    }
}

所以我在类似的 post 上找到了这个问题的答案,他们建议的是在可见屏幕周围设置一个框架。我刚刚将以下代码添加到 didMoveToView

    let frame = CGRectMake(255, 0, 515, self.frame.size.height)
    self.physicsBody = SKPhysicsBody(edgeLoopFromRect: frame)

我希望这对以后的人有所帮助!