2017-07-18 46 views
2

我創建了2個SKSpriteNodes,並通過SKPhysicsJointFixed連接它們,以使它們粘在一起。問題是,當我將SKAction.move(by:, duration:)應用到第一個時,它會單獨移動。爲什麼是這樣,我該如何將它們移動到一起?我搜索了很多,但似乎無法找到任何新的或有用的信息。請幫忙。提前致謝。SKPhysicsJointFixed在移動時不會將節點保持在一起

下面的代碼:

import SpriteKit 

class myGame: SKScene { 

var node1: SKSpriteNode! 
var node2: SKSpriteNode! 

func createNode(_ position: CGPoint, color: UIColor) -> SKSpriteNode { 
    let node = SKSpriteNode(color: color, size: CGSize(width: 50, height: 50)) 
    node.position = position 
    node.physicsBody = SKPhysicsBody(rectangleOf: node.size, center: position) 
    node.physicsBody?.affectedByGravity = false 
    node.physicsBody?.allowsRotation = false 
    return node 
} 

func setup() { 
    node1 = createNode(.zero, color: .red) 
    node2 = createNode(CGPoint(x: 0, y: -50), color: .green) 
    self.addChild(node1) 
    self.addChild(node2) 

    let anchor = CGPoint(x: node1.size.width/2, y: -node1.size.height/2) 
    let joint = SKPhysicsJointFixed.joint(withBodyA: node1.physicsBody!, bodyB: node2.physicsBody!, anchor: anchor) 
    physicsWorld.add(joint) 

} 

override func didMove(to view: SKView) { 
    setup() 
} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    node1.run(SKAction.move(by: CGVector(dx: 0, dy: 100), duration: 2)) 
} 


} 
+1

嘗試移動那些由物理(力或脈衝),並看看會發生什麼...... – Whirlwind

+1

我想可能是因爲您使用的是SKAction直接移動節點,而不是使用物理(即申請衝動或力量給物理學團體)。嘗試改變衝動。 –

+0

很確定上面兩個是正確的。 – Fluidity

回答

3

這是很奇怪的,但我也遇到過類似的事情。 它是創建問題的physicsBody上的AllowRotation。

修復:

node.physicsBody?.allowsRotation = true 

注: 你的物理身體對第二個節點是有點過。我建議你做這樣的代替:

node.physicsBody = SKPhysicsBody(rectangleOf: node.size) 

和你合資是目前節點的右上角,修復:

let anchor = CGPoint(x: 0, y: -node1.size.height/2) 

,除非你希望它是這樣的OFC :)

最後一個提示,如果你不知道它。在您的gameViewController中設置showPhysics以查看您的物理機構的輪廓。在使用物理學時它確實有很大的幫助。

view.showsPhysics = true 
+0

它都是關於'.allowsRotation'。非常感謝! – Fayyouz

+0

如果您確實需要allowRotation = false。你可以使用距離約束。或者簡單地將第二個節點的位置更新爲始終在第一個節點旁邊。 https://developer.apple.com/documentation/spritekit/skconstraint –

+0

但真正的問題是,節點不應該在我的應用程序旋轉:/ – Fayyouz

相關問題