2016-10-10 7 views
1

私は、プレイヤーがオブジェクトとの衝突を避けようとしているSpriteKitでゲームを構築しています。オブジェクトは3から5秒ごとに作成されていると私はそれが起こったときにゲームに行く何らかの理由で、画面の下部に衝突した後、親から削除する方法を把握しようとしている風景の下のコードを参照してください。SpriteKitでシーンを去った後にSKNodeを削除するには

import SpriteKit 

class PlayScene: SKScene, SKPhysicsContactDelegate { 

enum ColliderType: UInt32 { 

    case none = 0 
    case player1 = 1 
    case object = 2 
    case border = 4 
    case remove = 8 
} 

gameOver = false 

let ground = SKNode() 
    ground.position = CGPoint(x: 0, y: 0) 
    ground.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: self.frame.size.width + 500, height: 1)) 
    ground.physicsBody?.isDynamic = false 

    ground.physicsBody?.categoryBitMask = ColliderType.remove.rawValue 
    ground.physicsBody?.contactTestBitMask = ColliderType.object.rawValue 
    ground.physicsBody?.collisionBitMask = ColliderType.none.rawValue 

character1.physicsBody!.categoryBitMask = ColliderType.player1.rawValue 
    character1.physicsBody!.contactTestBitMask = ColliderType.object.rawValue 
    character1.physicsBody!.collisionBitMask = ColliderType.object.rawValue | ColliderType.border.rawValue 

object1.physicsBody!.categoryBitMask = ColliderType.object.rawValue 
     object1.physicsBody!.contactTestBitMask = ColliderType.player1.rawValue | ColliderType.remove.rawValue 
     object1.physicsBody!.collisionBitMask = ColliderType.player1.rawValue | ColliderType.border.rawValue | ColliderType.object.rawValue 

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue { 

gameOver == true 
} 

if contact.bodyA.categoryBitMask == ColliderType.remove.rawValue || contact.bodyB.categoryBitMask == ColliderType.remove.rawValue { 


      object1.removeFromParent() 
// it runs this code as well as code above collision object with object but i want contact remove with object 
} 

答えて

1

一緒に投げ捨てられたランダムなビットではなく、将来的に完全なコードを投稿してください。

あなたの衝突コードは意味を成しません。 player->オブジェクトとオブジェクト - >これが混乱している場合、私は、たくさん利用可能である、あなたはスプライトキットの衝突についてのいくつかのより多くのチュートリアルを読むことをお勧めまたはその逆

func didBegin(_ contact: SKPhysicsContact) { 

    let firstBody: SKPhysicsBody 
    let secondBody: SKPhysicsBody 

    // This way you only need to do 1 if statement for each collision. 
    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    } else { 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 


    // Player hit Object or Object hit Player 
    if (firstBody.categoryBitMask == ColliderType.player.rawValue) && (secondBody.categoryBitMask == ColliderType.object.rawValue) { 

     gameOver == true 
    } 

    // Object hit Remove or Remove hit Object 
    if (firstBody.categoryBitMask == ColliderType.object.rawValue) && (secondBody.categoryBitMask == ColliderType.remove.rawValue) { 

     // Remove object 
     firstBody.node?.removeFromParent() 
    } 
} 

を削除するかどうかを確認するところは、より次のようになります。あなたへ。

希望すると便利です。

関連する問題