2017-11-04 86 views
1

我需要在框架中移動SpriteNode。我目前遇到的問題是這樣做(失去了幾幀?不確定)。我需要的是對象水平移動而沒有固定的方向x目標,以便如果x被某種影響所抵消,對象不會嘗試返回到其初始化的x座標。 這裏是那部分代碼看起來像現在:swift,移動SKSpriteNode?

`spaceRock.physicsBody?.affectedByGravity = false 
spaceRock.physicsBody = SKPhysicsBody(texture: (spaceRock?.texture)!, 
size:(spaceRock.size)) 
spaceRock.zPosition = 1 
spaceRock.position=CGPoint(x: xSpawnPosition, y: 
Double(self.size.height/2+(spaceRock.size.height))) 
spaceRock.physicsBody!.isDynamic = true 
spaceRock.physicsBody!.allowsRotation = true 
spaceRock.physicsBody!.categoryBitMask = 00000001 
spaceRock.physicsBody!.contactTestBitMask = 00000010 
addChild(spaceRock) 
spaceRock.physicsBody?.applyTorque(CGFloat(randTorque)) 
//spaceRock.run(SKAction.moveTo(y: -self.size.height- 
spaceRock.size.height, duration: rockTravelTime))` 

的評論是我一直使用的是什麼,直到這一點。

謝謝你的幫助!

回答

0

您正在混合物理模擬(SKPhysicsBody)和直接移動Sprite(SKAction.moveTo) - 儘管您可能可以通過它來實現特殊效果,但通常它們會相互對抗並導致問題。

如果你需要你的物體實際移動,然後使用SKPhysicsBody並施加力(扭矩,推力等)來移動它。這對於編程來說相當複雜,並且具有顯着的處理開銷。

如果你喜歡直接移動你的精靈然後擺脫SKPhysicsBody和你的moveTo應該工作得很好。

+0

說我把SKPhysicsBody拿出來了,我該如何測試兩個節點之間的接觸? – Ari

+0

@Ari你可以使用SKNode的intersects方法檢查它們的幀是否重疊。這取決於你想達到什麼。物理學可能是最好的方法,但你應該用物理學來移動你的身體。 –