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:
und das ist, wie es aussieht, wenn sie Scale-up:
das Problem sehen nach rechts? Sie interagieren jetzt nicht miteinander. Ich kann das Federgelenk sieht angebracht ist, wenn ich einen von ihnen ziehen:
Gibt es einen Grund, warum die Objekte nicht mehr miteinander interagieren?
Dies ist, was passiert, wenn Sie nur das Gelenk entfernen:
Die Objekte umeinander drücken. Dies muss erreichbar sein. Was mache ich falsch?
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
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. –