2016-06-21 35 views
-2

我有一個由小SKNodes移動的遊戲。它們不能重疊,所以我使用物理機構,以便它們彼此移動。但是,如果一個sknode被動態地跟隨另一個,它會將sknode向前推。將碰撞位掩碼設置爲0會使它們重疊,所以這不是一個選項。但除此之外,他們互相推動超出我想要的速度。我需要一種方式來擺脫使用skphysics機構而不重疊的'推動'。有沒有一個屬性可以解決這個問題?我可以讓物理體碰撞而不會互相推?

注意:我使用skanimations移動我的節點。如果你需要任何相關的代碼,告訴我......我不知道從哪裏開始。我使用的是Swift 3.0,但我會接受2.2/2.3語法的答案。

編輯:真正的解決方案是改變節點的速度,而不是使用SK Actions進行動畫運動。

+0

幾乎沒有足夠的信息對物體的重量。 4發佈了答案,什麼都不接受? –

+0

我在這裏與需要更多信息的人聊天。我沒有時間來完善建議的方法,但我仍然在嘗試。當我到達我的電腦時,我可以添加一些示例代碼。如果您發現某些信息適用,請詢問@DanielKanaan –

回答

0

變化的移動物體的你的物理身體恢復到0,在發生接觸,並設置你不想動了真心高

+0

這幾乎是我所需要的,但下面的節點看起來真的很糟糕,對齊的位置 –

+0

不確定你真正的意思是什麼 – Knight0fDragon

+0

我想發佈一個視頻..下面的節點與領導者節點緊密相連,但是當領導者節點減速時,跟隨者開始快速地進入和離開領導者的物理體,幾乎就像看到雙倍,直到領導者再次加速。 –

0

您是否嘗試過在正在推送的物體上將動態屬性設置爲false?

+0

我試過了,它給了我所需的速度。除了不動態時,它可以自由地浮過牆壁。 –

0

設置完contactTestBitMask你可以設置此:

myHero.physicsBody!.collisionBitMask = 0 

防止碰撞,但允許接觸。

+0

有沒有辦法做到這一點,仍然防止重疊? –

+0

@邁克爾奧斯汀用這種方式,你總是會收到func didBeginContact的聯繫人(聯繫方式:SKPhysicsContact){},你決定在這裏,如果你想超出或疊加它們。 –

0

用SKAction更新動態物理體的位置並不好。這就像是在說 - 嘿,不管什麼物理世界的規則說,只是像我想要的那樣移動我的節點。

第一種解決方案 - 使一個節點跟着另一個節點使用SKConstraint。

import SpriteKit 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     let nodeA = SKSpriteNode(color: SKColor.greenColor(), size: CGSize(width: 50, height: 50)) 
     nodeA.name = "nodeA" 
     addChild(nodeA) 

     let nodeB = SKSpriteNode(color: SKColor.redColor(), size: nodeA.size) 
     nodeB.name = "nodeB" 
     addChild(nodeB) 

     let followConstraint = SKConstraint.distance(SKRange.init(lowerLimit: nodeB.size.width * 1.5, upperLimit: nodeB.size.width * 1.5), toNode: nodeA) 
     nodeB.constraints = [followConstraint] 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     guard let touch = touches.first else { 
      return 
     } 


     childNodeWithName("nodeA")!.runAction(SKAction.moveTo(touch.locationInNode(self), duration: 2)) 
    } 
} 

如果仍要物理機構和SKActions ...

  1. 「動態」每一個物理體的假財產。
  2. 如果它們重疊,請檢入didBeginContact(SKPhysicsContactDelegate協議)。如果這是真的,那麼就移除所有正在改變其立場的行動。提示 - 使物理體比它的節點大一點。
+0

謝謝,但設置約束後,節點b從不更新要移動的約束。它只是停止,而節點a繼續。 –

+0

約束無法更新。您可以啓用/禁用特定約束。您也可以刪除它並添加新的。 – mikem

+0

好吧,但我遵循你的例子,並且節點B不再跟隨節點A,而是節點B在產生後不移動。 –