2015-12-04 41 views
2

我正在嘗試使用SKShapenode在Swift中創建牆。即使將碰撞位掩碼設置爲「全部」,字符仍然會在矩形中移動並且不會與其交互。如何用SKShapenode創建牆壁?

建立物理學類:

struct PhysicsCategory { 
    static let None  : UInt32 = 0 
    static let All  : UInt32 = UInt32.max 
    static let Monster : UInt32 = 0b1 
    static let Projectile: UInt32 = 0b10 
    static let Walls  : UInt32 = 0b11 
    static let Player : UInt32 = 0b100 
} 

我如何試圖建立城牆:

let rectangle = SKShapeNode(rectOfSize: CGSize(width:390, height:200)) 
rectangle.position = CGPointMake(frame.midX-10, frame.midY + 50) 
rectangle.strokeColor = SKColor.blackColor() 
rectangle.glowWidth = 1.0 

rectangle.physicsBody = SKPhysicsBody(edgeLoopFromRect: rectangle.frame) 
rectangle.physicsBody?.dynamic = false 
rectangle.physicsBody?.categoryBitMask = PhysicsCategory.Walls 
rectangle.physicsBody?.contactTestBitMask = PhysicsCategory.None 
rectangle.physicsBody?.collisionBitMask = PhysicsCategory.All 
self.addChild(rectangle) 

回答

0

你必須設置contactTestBitMask爲 '全部' 不collisionBitMask

rectangle.physicsBody.contactTestBitMask = PhysicsCategory.All 
+1

contactTestBitMask用來檢查是否發生接觸,並調用'didBeginContact'方法,collisionBitMask是一個合適的創建高牆上的對象不通過 – Pieter

0

角色的設置是什麼?他們的physicsBody必須正確設置才能工作。

此外,至少有一個SKNode的physicsBody必須設置爲dynamic = true,如果兩者都有dynamic = false,則它將不起作用。

+0

一切的物理機構設置爲動態=真和他們所有的碰撞位掩碼設置爲「牆壁」。 – nick

+0

還有什麼會導致這不起作用? – nick

+0

@nick很多東西....你想讓我隨機猜測?我建議你做一個最小的項目,看看它是否有效,如果不發佈代碼,如果它發生,看看你的真實項目的不同之處,並試圖找出它出錯的地方? – Pieter