моя игра состоит из игрока, который прыгает на случайно сгенерированных платформах разной длины и размера. Я хочу, чтобы игрок мог прыгать через платформу и приземляться на нее, так как текстуры могут быть различной длины. Я реализовал приведенный ниже код, но он конфликтует с моим узлом верхних границ, который я создал, чтобы заставить игрока удариться о стену, если он прыгнет слишком высоко. Это также противоречит моему количеству разрешенных прыжков, поскольку его счетчик сбрасывается, когда он касается наземной платформы. Хотите знать, есть ли лучший способ реализовать это:
override func update(_ currentTime: TimeInterval) {
//Avoid hitting ground while jumping
if let playerBody = player.physicsBody{
let dy = playerBody.velocity.dy
if dy > 0 {
playerBody.collisionBitMask &= ~1
//playerBody.contactTestBitMask = obstacleCat
//player.physicsBody?.categoryBitMask = playerCat
}
else{
playerBody.collisionBitMask |= 1
}
}
}
func jump() {
contactGround = false
player.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
player.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 25))
jumpCounter += 1
if jumpCounter > 2 {
canJump = false
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
switch gameState{
case .playing:
if canJump{
jump()
}
}
}