Физические тела SpriteKit движутся друг через друга, несмотря на набор битовых масок столкновения
Я делаю игру, в которой используется Doodle Jump, например прыжки, в которых вы можете проходить через платформы, если вы двигаетесь вверх, но не если вы двигаетесь вниз, за исключением того, что всегда есть наземная платформа. Ты никогда не сможешь опуститься ниже этой наземной платформы. Однако, если игрок движется достаточно быстро, он проходит через наземную платформу, как показано на рисунке:
Еще более запутанным является то, что это происходит только 1 раз в 5 прыжков и происходит только с наземной платформой, которая идентична более высоким платформам. Другая вещь, которая необычна, заключается в том, что если игрок находится под землей, он все равно правильно обнаруживает удары врагов, как если бы они были на земле, даже если изображение находится полностью под землей, что заставляет меня думать, что физическое тело и изображение как-то не соответствуют т синхронизированы.
Я использую статический SKPhysicsBody
s для представления этих платформ и наземных и динамических SKPhysicsBody
представлять игрока. у меня есть platform.physicsBody?.collisionBitMask = PhysicsCategory.Player
для платформ, и player.physicsBody?.collisionBitMask = PhysicsCategory.Platforms
для игрока. у меня тоже есть physicsBody?.usesPreciseCollisionDetection = true
для обоих. Оба используют прямоугольники для реализации своих физических тел, причем платформы имеют толщину 2.
Я попробовал все, и, кажется, ничто не может это исправить. Я даже пытался проверить это didSimulatePhysics()
,
override func didSimulatePhysics() {
if self.player.position.y <= 1/7 * size.height {
player.position.y = 1/7*size.height //+ CGFloat(yScaler) * size.height
if let body = player.physicsBody {
if body.velocity.dy < 0 {
self.player.physicsBody?.velocity.dy = 0
}
}
}
}
didSimulatePhysics()
правильно определяет, когда это происходит, но когда я пытаюсь настроить player.position.y, он вообще не обновляется и остается в ловушке под землей!
Есть идеи о том, что здесь происходит? Я в конце концов. Заранее спасибо!