2016-04-26 10 views
1

Ich verwende SpriteKit, um eine lustige Hotspot-Benutzeroberfläche für ein Projekt zu erstellen. Es sollte wirklich einfach sein! Nur ein Hintergrundbild mit einer Ladung von Punkten darauf. Wenn Sie auf einen Punkt tippen, wird er skaliert. Wenn Sie erneut tippen, wird die ursprüngliche Größe und Position wiederhergestellt. Aber, noch wichtiger, jeder Punkt hat Physik, und wenn er skaliert, bewegen sich die anderen vorübergehend weg. Wenn die Punkte auf ihre normale Größe zurückkehren, springen sie zurück in ihre Position.SpriteKit fügt jedem Knoten ein Federgelenk hinzu

Um dies zu erreichen, habe ich eine Reihe von SKShapeNodes auf der Seite positioniert. Ich erstelle auch einen SKPhysicsJointSpring, der an die Szenen physicsBody und den SKShapeNode angehängt ist.

Hier ist der Code für die Szene:

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 die SKShapeNode Unterklasse ist. Dies ist, wie es auf dem Bildschirm aussieht:

nodes static

und das ist, wie es aussieht, wenn sie Scale-up:

enter image description here

das Problem sehen nach rechts? Sie interagieren jetzt nicht miteinander. Ich kann das Federgelenk sieht angebracht ist, wenn ich einen von ihnen ziehen:

enter image description here

Gibt es einen Grund, warum die Objekte nicht mehr miteinander interagieren?

Dies ist, was passiert, wenn Sie nur das Gelenk entfernen:

enter image description here

Die Objekte umeinander drücken. Dies muss erreichbar sein. Was mache ich falsch?

+0

Setzen Sie Ihre Bitmaskenwerte auf alle gleich, wie 'let j: __ uint32_t = 0x1'. Siehe [Apple's Docs] (https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html#//apple_ref/doc/uid/TP40013043-CH6-SW14) zum Lesen auf Bitmasken. In den unteren beiden Screenshots sehe ich eine dünne blaue Linie an der Spitze, aber nicht an den anderen zwei, gab es andere Änderungen an der Szene? – Gliderman

+0

Sie verwenden überhaupt keine Bitmasken. Das war Legacy-Code von, als ich versuchte, ein Feld für jeden Knoten hinzuzufügen. Jeder der Knoten hat ein Federgelenk. Wenn ich einen der Knoten (wie im Screenshot) ziehe, sieht man seine Verbindung als dünne blaue Linie. Sie sehen es nur, wenn man gezogen wird. Ich bin mir sicher, dass die Federn existieren und mit der Szene und einem Knoten verbunden sind. Es ist die Tatsache, dass sie jetzt nicht miteinander interagieren. –

Antwort

1

Leider scheint dies mit SpriteKit nicht möglich zu sein. Dieser Beitrag: SKPhysicsJoint: Contacts and collisions not working bestätigt es.

Ich muss sagen, das scheint verrückt. Warum würdest du keine Gelenke und Federn erzeugen wollen und dann die Knoten, die du verbunden hast, in der Physikwelt kollidieren und reagieren?

Es scheint so, als müsste ich die Feder verlieren und die Knoten einfach so codieren, dass sie ständig an ihren ursprünglichen Ort zurückdriften. Wenn einer von ihnen die anderen aus dem Weg schiebt und schiebt, werden sie immer versuchen, nach Hause zu kommen.

+0

Ja ich denke Sprite-Kit ist ziemlich kaputt. – trojanfoe

+0

Das würde so eine einfache Schnittstelle sein, um zu bauen. Weißt du, ob es mit UIKit Physik möglich ist? –

+0

Ich weiß nicht, was "UIKit Physik" ist, aber ich denke, Sie könnten es einfach mit UIKit machen. Ich bin nicht sehr vertraut mit dem, was Sie versuchen, aber ich denke, ich weiß, und ich könnte mir vorstellen, es wäre nicht schwer zu arbeiten. Sie werden wahrscheinlich eine Ebene für jede Schaltfläche verwenden und ihre Bewegung in der benutzerdefinierten Ansichtsklasse verwalten. – trojanfoe

Verwandte Themen