2016-05-06 15 views
0

を越えることができない境界線を設定しようとしている私はSKContactDelegateを設定している衝突検出(SWIFT)は動作しません、私はプレイヤーが

class GameScene: SKScene, SKPhysicsContactDelegate 
{ 
    override func didMoveToView(view: SKView) 
{ 
    self.physicsWorld.contactDelegate = self 

ここに私のセットアップ列挙

enum ColliderType:UInt32 
{ 
    case Player = 1 
    case Boundary = 2 
} 

ここでは、プレイヤーノードを作成します。

let playerTexture = SKTexture(imageNamed: "testCircle1.png") 
    thePlayer = SKSpriteNode(texture: playerTexture) 
    thePlayer.position = CGPointMake(frame.size.width - 350, frame.size.height/2) 
    thePlayer.zPosition = 5 
    thePlayer.size = CGSize(width: 100, height: 100) 
    thePlayer.name = "playerNode" 
    thePlayer.physicsBody = SKPhysicsBody(circleOfRadius: playerTexture.size().height/2) 
    thePlayer.physicsBody!.dynamic = false 
    thePlayer.physicsBody!.allowsRotation = false 

    thePlayer.physicsBody!.categoryBitMask = ColliderType.Player.rawValue 
    thePlayer.physicsBody!.contactTestBitMask = ColliderType.Boundary.rawValue 
    thePlayer.physicsBody!.collisionBitMask = ColliderType.Boundary.rawValue 
    addChild(thePlayer) 

その後、私はセットアップ私はそれもすべてで衝突を検出したかどうかを確認するためにif文の外にプリントを入れてみまし境界

ground = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(frame.size.width - 150, 10)) 
    ground.position = CGPointMake(frame.size.width/2 - 75, 96) 
    ground.zPosition = 5 
    ground.physicsBody = SKPhysicsBody(rectangleOfSize:  CGSizeMake(ground.size.width, ground.size.height)) 
    ground.physicsBody!.dynamic = false 
    ground.physicsBody!.allowsRotation = false 

    ground.physicsBody!.categoryBitMask = ColliderType.Boundary.rawValue 
    ground.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue 
    ground.physicsBody!.collisionBitMask = ColliderType.Player.rawValue 
    addChild(ground) 

    sky = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(frame.size.width - 150, 10)) 
    sky.position = CGPointMake(frame.size.width/2 - 75, frame.size.height - 96) 
    sky.zPosition = 5 
    sky.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(frame.size.width - 150, 10)) 
    sky.physicsBody!.dynamic = false 
    sky.physicsBody!.allowsRotation = false 

    sky.physicsBody!.categoryBitMask = ColliderType.Boundary.rawValue 
    sky.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue 
    sky.physicsBody!.collisionBitMask = ColliderType.Player.rawValue 
    addChild(sky) 

そして、衝突検出

func didBeginContact(contact: SKPhysicsContact) 
{ 
    print("Contact") 
    if contact.bodyA.categoryBitMask == ColliderType.Boundary.rawValue || contact.bodyB.categoryBitMask == ColliderType.Boundary.rawValue 
    { 
     print("Contact") 
     thePlayer.removeAllActions() 
    } 
} 

をしかし、そうではありませんでした。 。

私は多くのチュートリアルを見て、彼らが何をしたか続いたが、それだけでは動作しませんし、私はこれだけでは有効にカップル週間以上持っている

+0

?それはそれが境界であり、物理学の影響を受けないことを意味する。 –

+0

おかげさまで、ありがとうございました、私は本当に愚かな気分になりました。私がダイナミックをfalseに設定した理由は、それが重力の影響を受けないようになっていたからです。しかし、私はaffectedByGravity関数を完全に忘れていました。ありがとう! –

+0

コメントを回答に転送しましたので、回答としてマークすることができます... –

答えて

0

プレーヤーのノードで

これを削除します。

thePlayer.physicsBody!.dynamic = false 
物理体が境界ではなく体であることを設定されて

...プレイヤーの物理体が動的= falseに設定されているのはなぜ

関連する問題