2016-12-20 50 views
2

我有一個建築起重機,有一個與物體的關節。如果起重機靜止,接頭工作正常。如果物體移出視野,爲什麼物理關節停止工作?

但是我增加了起重機從左到右移動的能力,並且每當起重機即將離開視野時物體碰到屏幕邊緣並在起重機繼續前進時卡住。即使在起重機回到視野後,接頭也停止工作。

這是一張圖片。頂部的黃線表示鉤子永遠跟隨的路徑。它從左到右。藍色矩形周圍的金塊就是卡住的東西。這是最初與起重機的灰色掛鉤連接的塊。但是當鉤子移動到視圖的右側時,金塊撞擊屏幕邊緣並永遠停留在那裏。

對我來說沒什麼意義的是,視圖的邊緣有一個0的類別位掩碼,而黃金塊的位置是64.在其他層次上,黃金塊不會與邊緣發生衝突。但在這裏,當起重機移動到邊緣時,金塊會碰到邊緣並卡住。正如你所看到的,這些關節仍然以淺藍色的物理線條爲基礎。

enter image description here

這是共同的代碼被稱爲從場景和配置它。就像我說的那樣,如果鉤子是靜止的,聯合就可以正常工作

craneBase.alpha = 0 
let path = CGMutablePath() 
path.move(to: CGPoint(x: craneBase.position.x, y: craneBase.position.y)) 
path.addLine(to: CGPoint(x: craneBase.size.width - 100, y: craneBase.position.y + 10)) 
path.addLine(to: CGPoint(x: craneBase.position.x, y: craneBase.position.y)) 
craneHook.initializeMovingJoint(withObject: childNode(withName: "HookedObject") as! SKSpriteNode) 
hook.run(SKAction.repeatForever(SKAction.follow(path, asOffset: false, orientToPath: false, duration: 10))) 
physicsWorld.add(craneHook.joint) 

這是起重機的鉤類的代碼,增加了聯合的塊。

private func initHook() { 
    self.hookSize = CGSize(width: 10, height: 10) 
    self.physicsBody = SKPhysicsBody(rectangleOf: hookSize) 
    self.physicsBody?.categoryBitMask = PhysicsBit.none 
    self.physicsBody?.isDynamic = false 
    self.physicsBody?.affectedByGravity = false 
} 

//Creates the joint between the object and the hook 
func initializeJoint(withObject object: SKSpriteNode) { 
    initHook() 
    hookedObject = object 
    jointAnchor = CGPoint(x: self.anchorPoint.x, y: self.anchorPoint.y) 

    joint = SKPhysicsJointFixed.joint(withBodyA: physicsBody!, bodyB: hookedObject.physicsBody!, anchor: jointAnchor) 
    doesHaveHookedObject = true 
} 

和黃金塊的設置是從場景編輯器中的64一類面膜我測試過的黃金塊,他們不與邊緣碰撞分配。我不確定它爲什麼在移動時與邊緣發生碰撞。

+0

這是因爲內存管理,如果物理對象超出視圖,那麼它會停止 –

+0

有沒有反正我可以修復它或做與物理關節有關嗎? –

+1

試着定義你的場景比視圖更大,也許那麼它會在這個界限內工作 –

回答

0

我意識到它不工作,因爲聯合和physicsWorld具有相同的類別位掩碼。儘管金塊具有不同的位掩碼,但它是關節的一部分,因此與相同類別的位掩碼相沖突,因爲沒有。