Swift 5 SpriteKit Анимация игрока на основе контакта - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь заставить моего игрока показывать один спрайт, когда он прыгает, и показывать анимацию бегущих текстур, когда он находится на земле. Прямо сейчас он только бегает. Моя игра знает, находится ли игрок на земле или нет. Я настроил его на печать, когда он включен или выключен, и он работает правильно. Но я не могу понять, как заставить его показывать другую текстуру при прыжках.

Спасибо!

'' '

func createPlayer() {
    var playerTexture = SKTexture(imageNamed: "player-1")
    player = SKSpriteNode(texture: playerTexture)
    player.zPosition = 10
    player.position = CGPoint(x: frame.width / 6, y: frame.height / 3)
    

    addChild(player)
    
    player.physicsBody = SKPhysicsBody(texture: playerTexture, size: playerTexture.size())
    player.physicsBody!.contactTestBitMask = player.physicsBody!.collisionBitMask
    player.physicsBody?.contactTestBitMask = 3
    player.physicsBody?.isDynamic = true
    player.physicsBody?.angularVelocity = 0
    player.physicsBody?.allowsRotation = false
    player.physicsBody?.restitution = 0
    player.physicsBody?.collisionBitMask = 1
    player.physicsBody?.categoryBitMask = 2
    
    if playerOnGround == true {
    player.removeAction(forKey: "Jumping Action")
    let frame1 = SKTexture(imageNamed: "player-1")
    let frame2 = SKTexture(imageNamed: "player-2")
    let frame3 = SKTexture(imageNamed: "player-3")
    let frame4 = SKTexture(imageNamed: "player-4")
    let frame5 = SKTexture(imageNamed: "player-5")
    let frame6 = SKTexture(imageNamed: "player-6")
    let frame7 = SKTexture(imageNamed: "player-7")
    let frame8 = SKTexture(imageNamed: "player-8")
    let frame9 = SKTexture(imageNamed: "player-9")
    let frame10 = SKTexture(imageNamed: "player-10")
    let animation = SKAction.animate(with: [frame1, frame2, frame3, frame4, frame5, frame6, frame7, frame8, frame9, frame10,], timePerFrame: 0.1)
    let runForever = SKAction.repeatForever(animation)

    player.run(runForever, withKey: "Running Action")
    } else if playerOnGround == false {
        player.removeAction(forKey: "Running Action")
        playerTexture = SKTexture(imageNamed: "player-jump")
        let jumpAnimation = SKAction.animate(with: [playerTexture], timePerFrame: 0.1)
        let runJump = SKAction.repeatForever(jumpAnimation)
        player.run(runJump, withKey: "Jumping Action")
    }
}

' ''

...