Я строю игру в понг / брейкер с мячом и нестати c блоками. Я бы хотел, чтобы шар никогда не прекращал движение, но всякий раз, когда он попадает в блок, он теряет скорость.
У меня есть restitusion = 1 для всех задействованных спрайтов, я пытался установить массу, равную друг другу, и плотность и трение = 0. Но мяч все еще теряет скорость при отскоке.
Когда мяч попадает в блок, я удаляю его в функции didBegin (contact :). Я также пытался отложить удаление, и это не помогло.
Я бы хотел, чтобы мяч имел постоянную скорость, но все же мог бы взаимодействовать с блоками, как позже я хотел бы добавить блоки, которые могут быть поражены, не будучи сразу сломаны. Таким образом, блоки не могут быть c, но мяч должен иметь постоянную скорость.
Мой код для создания узла шара:
func ballNode(_ position: CGPoint?) -> SKSpriteNode {
let node = SKSpriteNode()
node.position = position == nil ? CGPoint(x: size.width/2, y: 100) : position!
node.size = CGSize(width: 17, height: 17)
//background
let background = SKShapeNode(circleOfRadius: 8.5)
background.fillColor = UIColor.white
node.addChild(background)
//physics
node.physicsBody = SKPhysicsBody(circleOfRadius: 8.5)
node.physicsBody?.allowsRotation = true
node.physicsBody?.friction = 0
node.physicsBody?.restitution = 1
node.physicsBody?.linearDamping = 0
node.physicsBody?.angularDamping = 0
node.physicsBody?.categoryBitMask = BallCategory
node.physicsBody?.contactTestBitMask = AddBlockBorderCategory | PaddleCategory
node.physicsBody?.collisionBitMask = PaddleCategory | BlockCategory | BorderCategory
return node
}
Мой код для создания Узел блока:
func createBlockNode() -> BlockNode {
let width = (size.width-CGFloat(6*layout[0].count))/CGFloat(layout[0].count)
let height = width*0.5
let nodeSize = CGSize(width: width, height: height)
let node = BlockNode(texture: nil, size: nodeSize)
let background = SKShapeNode(rectOf: nodeSize)
background.fillColor = .darkGray
background.strokeColor = .lightGray
//physics
node.physicsBody = SKPhysicsBody(rectangleOf: nodeSize)
node.physicsBody?.restitution = 1
node.physicsBody?.allowsRotation = true
node.physicsBody?.friction = 0
node.physicsBody?.categoryBitMask = BlockCategory
node.physicsBody?.contactTestBitMask = BallCategory
node.addChild(background)
return node
}
И запись на экране: Запись на экране скорости проигрыша шара
Я запускаю мяч, используя это:
ball!.physicsBody?.applyForce(CGVector(dx: 0, dy: 50))