Я использую 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. Вот как это выглядит на экране:
и вот как это выглядит при увеличении масштаба:
Видите проблему? Теперь они не взаимодействуют друг с другом. Я вижу, что соединение Spring прикреплено, когда перетаскиваю одно из них:
Есть ли причина, по которой объекты больше не взаимодействуют друг с другом?
Вот что произойдет, если вы просто удалите сустав:
Объекты толкают друг друга. Это должно быть достижимо. Что я делаю неправильно?
let j:__uint32_t = 0x1
. См. Документы Apple, чтобы узнать о битовых масках. На двух нижних снимках экрана я вижу тонкую синюю линию вверху, но не на двух других, были ли другие изменения в сцене? - person Gliderman   schedule 26.04.2016