2016-04-26 106 views
1

我使用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子類。這就是它看起來像在屏幕上:

nodes static

,這是什麼樣子時,他們向上擴展:

enter image description here

看到這個問題吧?他們現在不互相交流。我可以看到春天接頭連接,當我拖動其中的一個:

enter image description here

是否有任何理由爲什麼對象不再互相交流?

這是,如果你只是刪除聯合會發生什麼:

enter image description here

的對象推入對方身邊。這一定是可以實現的。我究竟做錯了什麼?

+0

將您的位掩碼值設置爲全部相同,如'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

+0

他們根本不使用位掩碼。這是我嘗試爲每個節點添加字段時的遺留代碼。每個節點都有一個彈簧接頭。如果我拖動其中一個節點(如截圖中所示),則會看到它的關節爲細藍線。你只有在被拖動時纔會看到它。我相信彈簧存在並連接到現場和節點。這是他們現在不互相交流的事實。 –

回答

1

不幸的是,這似乎是不可能與SpriteKit。這篇文章:SKPhysicsJoint: Contacts and collisions not working證實了它。我不得不說,這看起來很瘋狂。爲什麼你不想創建關節和彈簧,然後讓你連接的節點在物理世界中碰撞並作出反應?

看來我將不得不失去春天,只是編碼節點不斷漂回到原來的位置。這樣,當他們中的一個人縮小並推開其他人時,他們總是會試着回家。

+0

是的,我認爲Sprite-Kit很破碎。 – trojanfoe

+0

這將是一個如此簡單的界面來構建。你知道如果使用UIKit物理是可能的嗎? –

+0

我不知道「UIKit物理」是什麼,但我認爲你可以使用UIKit輕鬆完成。我並不太熟悉你的嘗試,但我認爲我知道,我會想象得到工作並不難。您可能正在爲每個按鈕使用圖層並在自定義視圖類中管理其移動。 – trojanfoe