SpriteKit を使用して、プロジェクト用の楽しい Hotspot UI を作成しています。それは本当に簡単なはずです!ドットがたくさんある背景画像です。ドットをタップすると拡大します。もう一度タップすると、通常のサイズと位置に戻ります。しかし、もっと重要なことは、各ドットには物理特性があるため、スケールアップすると他のドットが一時的に脇に移動することです。ドットが通常のスケールに戻ると、元の位置に戻ります。
これを実現するために、ページに多数の SKShapeNode を配置しました。また、シーンの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 サブクラスです。これは、画面上では次のように表示されます。
スケールアップすると、次のようになります。
問題が見えますか?彼らは今、お互いに交流していません。いずれかをドラッグすると、Spring ジョイントがアタッチされていることがわかります。
オブジェクトが互いに相互作用しなくなった理由はありますか?
ジョイントを削除すると、次のようになります。
オブジェクトは互いに押し合います。これは達成可能でなければなりません。私は何を間違っていますか?