Вот такая ситуация: у меня прыгающий красный шар и несколько случайно сгенерированных платформ. В случае контакта с нижней частью платформы мяч должен пройти через платформу. В другом случае это будет верхняя часть платформы, и мяч должен отскочить. Я изменил параметры .collisionBitMask и .contactTestBitMask, чтобы игрок мог пройти через платформу или отскочить от нее. Но мой код работает только для последней платформы, вы можете увидеть на снимок экрана . Для других платформ не работает - мяч также проходит через верх. У меня есть массив этих платформ, и я не знаю, как проверить текущую платформу.
Вот часть моего кода:
var platforms = [SKSpriteNode]()
....
extension GameScene: SKPhysicsContactDelegate {
func didBegin(_ contact: SKPhysicsContact) {
let floor = BitMaskCategory.floor
let player = BitMaskCategory.player
let platformCategory = BitMaskCategory.platform
let bodyA = contact.bodyA.categoryBitMask
let bodyB = contact.bodyB.categoryBitMask
if bodyA == player && bodyB == platformCategory || bodyA == platformCategory && bodyB == player {
for platform in platforms {
if self.player.position.y > platform.position.y {
self.player.physicsBody?.collisionBitMask = floor | platformCategory
self.player.physicsBody?.contactTestBitMask = floor | platformCategory
} else if self.player.position.y < platform.position.y {
self.player.physicsBody?.collisionBitMask = floor
self.player.physicsBody?.contactTestBitMask = floor
}
}
}
}
func didEnd(_ contact: SKPhysicsContact) {
let player = BitMaskCategory.player
let bar = BitMaskCategory.platform
let floor = BitMaskCategory.floor
let bodyA = contact.bodyA.categoryBitMask
let bodyB = contact.bodyB.categoryBitMask
if bodyA == bar && bodyB == player || bodyA == player && bodyB == bar {
for platform in platforms {
if self.player.position.y > platform.position.y {
self.player.physicsBody?.collisionBitMask = floor
self.player.physicsBody?.contactTestBitMask = floor
}
}
}
}
}
Итак, я не знаю, как проверить текущую платформу. Если я размещаю 3 постоянные платформы вручную, все работает нормально: D
Пожалуйста, помогите, не знаете, как реализовать эту задачу.