2017-05-15 30 views
0

我iOS編程Xcode的遊戲,我想這樣它落入視圖從屏幕上方發動colorSprite。如何在Swift中從屏幕上方啓動Sprite?

不過,我也形成了邊界,以便沒有精靈反彈外界看來...

let border = SKPhysicsBody(edgeLoopFrom: self.frame) 

其結果是,在colorSprite不進入視圖我申請的時候衝動就像這樣:

ball.physicsBody?.applyImpulse(CGVector(dx: -20, dy: -20)) 

一個可能的解決方案是激活邊境精靈已進入後,但比賽我正在要求colorSprites不斷從像雨點頂回落,但留一旦進入視圖的邊界之內。

我希望我已經解釋了它在邏輯上成爲可能,這將是解決方案嗎?

+0

刪除頂部邊緣,如果精靈不能彈開那麼高(和脫落的畫面,否則,改變碰撞位掩碼(從0到別的東西),在適當的時候,例如didEndContact,頂邊,或以類似的方式事情。 – Whirlwind

回答

0

讓上邊框不同類別的其他邊界:

let borderCategory:  UInt32 = 1 << 0 
let topBorderCategory:  UInt32 = 1 << 1 

然後,在update(),遍歷所有的精靈,如果他們向下移動,從與上邊框碰撞阻止他們。如果他們都動起來,讓他們碰撞:

enumerateChildNodes(withName: "//*") { node, _ in 
    if let sprite = node as? SKSpriteNode { 

     if (sprite.physicsBody?.velocity.dy)! > CGFloat(0) { 
      sprite.physicsBody?.collisionBitMask &= ~self.topBorderCategory 
     } 

     if (sprite.physicsBody?.velocity.dy)! <= CGFloat(0) { 
      sprite.physicsBody?.collisionBitMask |= self.topBorderCategory 
     } 
    } 
} 

現在你有有效的單向邊界。

P.S.這不是在update()但在physicsBody velocity屬性的屬性觀察者得到更好的實現,但我不能得到那個工作。