我正在使用 SpriteKit 为项目创建一个有趣的 Hotspot UI。应该很简单!只是一个背景图像,上面有很多点。当您点击一个点时,它会放大。当您再次点击时,它会恢复到正常大小和位置。但是,更重要的是,每个点都有物理特性,所以当它放大时,其他点会暂时移到一边。当点恢复到正常比例时,它们会弹回原位。
为了实现这一点,我在页面上放置了一堆 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 子类。这是它在屏幕上的样子:
这就是他们扩大规模时的样子:
看到问题了吗?他们现在不互相交流了。当我拖动其中一个时,我可以看到弹簧接头已连接:
对象不再相互交互有什么原因吗?
如果您只是移除关节,就会发生这种情况:
物体相互推动。这必须是可以实现的。我究竟做错了什么?