我使用SpriteKit爲項目創建有趣的熱點UI。它應該很簡單!只是一個背景圖像上有一些點的負載。當你點擊一個點時,它會擴大。當你再次點擊時,它會恢復到正常的大小和位置。但更重要的是,每個點都有物理學,所以當它擴大時,其他的就會暫時放在一邊。當點恢復到正常範圍時,它們將彈回原位。SpriteKit爲每個節點添加彈簧接頭
爲了達到這個目的,我在頁面上放置了一堆SKShapeNodes。我還創建了一個連接到場景physicsBody和SKShapeNode的SKPhysicsJointSpring。
下面是現場代碼:
override func didMoveToView(view: SKView) {
name = "Hotspot test"
physicsWorld.gravity = CGVectorMake(0, 0)
let physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody = physicsBody
for i in 1...10 {
let j:__uint32_t = 0x1 << UInt32(i) // <- IGNORE THIS. IRRELEVANT
let shape = DotNode(circleOfRadius: 60, name: "Ball"+String(i), id: i, bitmask: j)
// Position objects in a circle around the center
let degrees = (360/10)*i
let radians = degrees.degreesToRadians
let radius = CGFloat(300)
let cosR = cos(radians)
let sinR = sin(radians)
let xPos = radius*cosR+frame.size.width/2
let yPos = radius*sinR+frame.size.height/2
let pos = CGPoint(x: xPos, y: yPos)
shape.position = pos
addChild(shape)
let spring = SKPhysicsJointSpring.jointWithBodyA(self.physicsBody!, bodyB: shape.physicsBody!, anchorA: pos, anchorB: pos)
spring.damping = 0.01
physicsWorld.addJoint(spring)
}
DotNode是SKShapeNode子類。這就是它看起來像在屏幕上:
,這是什麼樣子時,他們向上擴展:
看到這個問題吧?他們現在不互相交流。我可以看到春天接頭連接,當我拖動其中的一個:
是否有任何理由爲什麼對象不再互相交流?
這是,如果你只是刪除聯合會發生什麼:
的對象推入對方身邊。這一定是可以實現的。我究竟做錯了什麼?
將您的位掩碼值設置爲全部相同,如'let j:__ uint32_t = 0x1'。請參閱[Apple's Docs](https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html#//apple_ref/doc/uid/TP40013043-CH6-SW14)以閱讀在位掩碼上。在底部的兩個屏幕截圖中,我看到頂部有一條細藍線,但其他兩條線沒有,場景中是否還有其他更改? – Gliderman
他們根本不使用位掩碼。這是我嘗試爲每個節點添加字段時的遺留代碼。每個節點都有一個彈簧接頭。如果我拖動其中一個節點(如截圖中所示),則會看到它的關節爲細藍線。你只有在被拖動時纔會看到它。我相信彈簧存在並連接到現場和節點。這是他們現在不互相交流的事實。 –