2015-04-26 34 views
0

我正在使用SpriteKit物理引擎進行小型彈跳球遊戲。我的問題是:SpriteKit - 爲什麼我的彈跳球穿過地面?

當我在彈跳球上施加一個巨大的衝動使它快速落地,有時它可能穿過地面(非常薄,高度= 2)。

我在Apple文檔中找到了這個,但它不起作用。

指定高精度碰撞小或快速移動的物體 當雪碧套件進行碰撞檢測,它首先確定所有場景中的物理機構的位置。然後確定是否發生衝突或聯繫。這種計算方法很快,但有時會導致錯過碰撞。一個小身體可能會移動得太快,以至於它完全穿過另一個物理體,而沒有一個動畫幀,兩個幀之間相互接觸。

如果您有碰撞的物理實體,您可以提示Sprite Kit使用更精確的碰撞模型來檢查交互。這個模型比較昂貴,所以應該謹慎使用它。當任何一個身體使用精確的碰撞時,多個移動位置被接觸並測試以確保所有接觸被檢測到。

ship.physicsBody.usesPreciseCollisionDetection = YES;

+0

我發現了同樣的問題:http://stackoverflow.com/questions/24838465/why-my-physics-bodies-pass-through-each-other-after-a-few-collisions-in-spriteki – noodles

回答

1

你可以設置你的精靈的node.physicsBody.usesPreciseCollisionDetection = YES;,但這並不能保證碰撞標誌的所有時間,你的精靈的速度可能僅僅是太高了。

您應該對節點應用速度限制,以防止它們變得太快。是這樣的:

if(node.physicsBody.velocity.dx > 200) 
    node.physicsBody.velocity = CGVectorMake(200, node.physicsBody.velocity.dy); 

上面的代碼示例將限制右移動,DX,您的節點至200,同時保持DY(上/下)的速度不變。