2014-07-17 32 views
0

我有一堆積木(想想憤怒的小鳥),當一個彈丸擊中它們時,它們會像你期望的那樣墜落。SKPhysicsBody -bodyWithEdgeLoopF​​romRect爲什麼不對碰撞做出反應?

self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size]; 

但是,如果我創建了物理體這樣的:不過,如果我創建像這樣的physicsBody這僅適用

CGRect r = CGRectMake(-self.size.width/2, -self.size.height/2, self.size.width, self.size.height); 
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:r]; 

然後碰撞是有的,但塊不受它影響。拋射物從它上面彈開,但不會導致塊體移動。我的categoryBitMask和collisionBitMask是正確的 - 它們與-bodyWithRectangleOfSize一起工作,但-bodyWithEdgeLoopF​​romRect沒有。

這是一個SpriteKit錯誤,或者我錯過了什麼?

感謝,

-Brian

回答

2

看一看的SKPhysicsBody Class Reference

你會發現,創建physicsBodies各種類的方法分爲兩類上市,即基於卷的基於邊緣的物理機構。

bodyWithRectangleOfSize:返回一個基於音量的physicsBody,而bodyWithEdgeLoopFromRect返回一個基於邊緣的physicsBody。

在同一文件的概述,兩者之間的差異進行說明爲:

精靈工具包支持兩種物理機構,基於體積的體 和基於邊緣的機構。當你創建一個物理體時,它的種類,尺寸, 和形狀是由你調用的構造函數方法決定的。 An 基於邊緣的物體沒有質量或體積,並且不受系統中的力或衝擊影響。基於邊緣的物體用於 代表物理模擬中的無體積邊界或空心空間。相反,基於體積的物體用於表示具有質量和體積的物體。

+1

某處還有解釋說明基於邊緣的物體不會與其他基於邊緣的物體產生接觸事件。如果不在參考文獻中,那麼在SK編程指南中。 – LearnCocos2D

+0

@ LearnCocos2D https://developer.apple.com/documentation/spritekit/skphysicsbody - isDynamic屬性控制基於音量的主體是否受重力,摩擦力,與其他對象的碰撞影響... –