1

這個問題一直是discussed here,但我想聽聽其他人物理世界的經驗,迫使節點彼此不可預知地相互傳遞。SKAction在碰撞後強制節點彼此通過

我使用的是SKAction移動一個節點。這個節點需要以恆定的速度在場景中滑動,直到達到某個位置。第二個節點正在通過重力墜落,直到它接觸到場景框架。

當兩個節點發生碰撞時,我會假設下降的節點對重力提升。相反,第二個節點偶爾會在第一個節點的另一側重新定位。在didBeginContact中正確檢測到碰撞。

這似乎取決於SKAction的速度。如果我減慢使第一個節點下滑20%的SKAction,那麼碰撞將按照預期提升第二個節點。

解決此類行爲的最佳方法是什麼?

+0

>我正在使用SKAction來移動一個節點。怎麼樣!?告訴我們你是如何做到的。或者你只是在尋找解決方案? –

+0

我正在使用以下SKAction以恆定速度垂直滾動容器節點:SKAction * scrollVerticalAction = [SKAction moveByX:0 y:verticalScroll duration:duration];如果我無法將SKActions與物理結合起來,我可以更改容器節點速度嗎?我的容器節點定義如下:containerNode = [[SKNode alloc] init]; containerNode.name = @「obstacContentNode」; [self addChild:containerNode]; – Alex

回答

1

一切都在鏈路幾乎解釋。如果你對物理模擬感興趣,唯一認可的方法是通過施加力量或衝動或直接改變速度矢量來移動所有物體。

如果你看每一幀是如何在SpriteKit處理,你會本身是:

  • 動作將被執行第一
  • 物理學之後

所以模擬,如果移動節點手動,你不讓物理模擬將它移動到它認爲合適的地方。您正在使物體與實際的物理模擬不同步。而且,這樣,節點將被動作和物理引擎兩者所移動,從而產生意想不到的結果。

聯繫將檢測工作,雖然。但不要混淆術語「接觸」和「碰撞」。即使您使用SKActions移動身體,聯繫人也會正確地觸發。但是,碰撞可能無法正確模擬等。所以只要你對聯繫人感興趣,你就可以走了。如果對任何一種物理模擬感興趣,那麼就用適當的方法與物理世界進行交互。