2014-06-27 34 views
3

我在使用Apple的SpriteKit和SKPhysics構建遊戲,該遊戲使用基於用戶輸入在屏幕上移動的正方形。我碰到一個碰撞問題,那就是如果它們碰撞,正方形將移動到不合適的地方。例如,如果所有塊都向右移動,則位於同一「行」上的任何塊都需要堆疊在一起,而不是垂直重疊或移動位置。截至目前,他們將改變他們的垂直方向。這裏是我的代碼:在sprite工具包中發生碰撞時停止對象

self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size]; 
self.physicsBody.dynamic = YES; 
self.physicsBody.allowsRotation = NO; 
self.physicsBody.affectedByGravity = NO; 

有沒有其他的設置,我錯過了?

+0

如果您需要精確運動,最好不要使用物理運動。您可以嘗試將更新期間節點位置的x或y分量設置爲固定座標,以避免其沿特定軸移動。這就是你所能做的一切。 – LearnCocos2D

回答

0

如果你通過用戶輸入移動你的精靈(例如SKAction的moveTo),那麼你很可能不會使用物理來移動你的精靈。在這種情況下,你應該將物體的速度設置爲0--這會使精靈在與另一個物體接觸時完全僵化。

嘗試:

self.physicsBody.velocity = CGVectorMake(0, 0); 

你應該把這個代碼的更新循環內。

1

該問題可能來自您的collisionBitMask類別。爲了解決這個問題,你需要首先創建塊類物理機構如下:

struct PhysicsCategory { 
    static let None : UInt32 = 0 
    static let All : UInt32 = UInt32.max 
    static let block : UInt32 = 0b1 
    } 

然後設置塊設置爲以下。

block.physicsBody?.categoryBitMask = PhysicsCategory.block 
    block.physicsBody?.collisionBitMask = PhysicsCategory.None 

這應該防止spritekit自動執行碰撞計算。

+0

這似乎是最簡單的解決方案,並且對我的小Pong測試非常有用。這絕對是更清潔的答案與最upvotes。 –