SpriteKit добавляет пружинное соединение к каждому узлу
Я использую SpriteKit для создания забавного пользовательского интерфейса Hotspot для проекта. Это должно быть действительно просто! Просто фоновое изображение с множеством точек. Когда вы нажимаете на точку, она увеличивается. При повторном нажатии он возвращается к своему обычному размеру и положению. Но, что более важно, каждая точка имеет физику, поэтому, когда она масштабируется, другие временно отодвигаются. Когда точки вернутся к своему нормальному масштабу, они вернутся в исходное положение.
Для достижения этого у меня есть куча SKShapeNodes, размещенных на странице. Я также создаю SKPhysicsJointSpring, который прикреплен к физическим объектам сцены и SKShapeNode.
Вот код для сцены:
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. Вот как это выглядит на экране:
и вот как это выглядит, когда они масштабируются:
Видите проблему правильно? Они не взаимодействуют друг с другом сейчас. Я вижу, что пружинное соединение прикреплено, когда я перетаскиваю одно из них:
Есть ли причина, по которой объекты больше не взаимодействуют друг с другом?
Вот что произойдет, если вы просто удалите сустав:
Объекты толкают друг друга. Это должно быть достижимо. Что я делаю неправильно?
1 ответ
К сожалению, кажется, что это невозможно с SpriteKit. Этот пост: SKPhysicsJoint: Контакты и столкновения не работает подтверждает это.
Я должен сказать, это кажется сумасшедшим. Почему бы вам не захотеть создать соединения и пружины, а затем соединить узлы, которые вы подключили, и среагировать в мире физики?
Кажется, мне придется потерять пружину и просто закодировать узлы, чтобы они постоянно возвращались в исходное положение. Таким образом, когда один из них масштабируется и отталкивает других с пути, они всегда будут пытаться добраться до дома.