1

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 ジョイントがアタッチされていることがわかります。

ここに画像の説明を入力

オブジェクトが互いに相互作用しなくなった理由はありますか?

ジョイントを削除すると、次のようになります。

ここに画像の説明を入力

オブジェクトは互いに押し合います。これは達成可能でなければなりません。私は何を間違っていますか?

4

1 に答える 1