SKAction Работает в didMovetoview, но не работает в Function - PullRequest
0 голосов
/ 25 сентября 2018

Я задавал этот вопрос ранее на здесь , но не смог объяснить, потому что не очень хорошо понял эту проблему.Но теперь, исследуя и пытаясь найти решение, я понял его больше.

Моя главная проблема - у меня есть функция, чтобы проверить, если два игрока находятся на одной позиции, если это так, а затем переместить первого игрока в его домашнюю локацию, которая работаетраньше было хорошо, но после того, как 4 игроками и их четырьмя фигурами стало играть, он перестал работатьНо если я вставлю тот же код в didmovetoview, то он работает нормально.так что нет проблем в коде, но есть другая фундаментальная проблема, которую я не понимаю, потому что это мой первый быстрый проект.

Вот процесс:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

rollDice(player: whosTurn)      

movePiece()
}

пользователь трогает кости, бросает костипосле броска костей пользователь может коснуться фигуры игрока, и он будет двигаться, вызывая функцию movePiece Func.Где после проверки 3 условий условия и одного за цикл, если 2 игрока в одной позиции, он вызовет основной функ киллхим, чтобы переместить этого игрока в его исходную позицию, но он не работает.

func movePiece() {

    if (movesRemaining > 0) {

let currentSpace:Int = returnPlayerSpace(player: whosTurn)

        let spaceNumber:Int = currentSpace
        var nextSpace:Int = spaceNumber + 1

        for node in children {

            if (node.name == String(nextSpace)) {

            let moveAction:SKAction = SKAction.move(to: node.position, duration: 0.5)
            moveAction.timingMode = .easeOut
            let wait:SKAction = SKAction.wait(forDuration: 0.1)
            let runAction:SKAction = SKAction.run({

                if (self.movesRemaining == 1) {

                    self.KillHim(self.whosTurn, nextspace: nextSpace) // The Problem Call

                }

                self.movesRemaining = self.movesRemaining - 1
                self.setThePlayerSpace(space: nextSpace, player:self.whosTurn)

                self.movePiece()

                })
                if whosTurn == .Player1 {

                    touchedNode.run(SKAction.sequence([moveAction, wait, runAction]))

                } else {

                    playerPiece.run(SKAction.sequence([moveAction, wait, runAction]))

                }
            moveFinished = true
                dice.isHidden = true
            }
        }

    } else {

if (self.whosTurn == .Player1) {

            Dice.isHidden = false
            Dice2.isHidden = true

            if (player1Moves == 0) {

                self.whosTurn = .Player2

                rollDice(player: whosTurn)

            }  else {.    // After adding this it all started   

            player1Moves -= 1

          }

        } else if ...............(Continue..)

, когда онтолько на 1 ход он работал нормально, после добавления еще на 1 ход он не работает, потому что иногда он вызывает функцию rollDice func.

func KillHim(_ player:Player, nextspace:Int) {

     if (nextspace == 1 || nextspace == 5 || nextspace == 9 || nextspace == 13 || nextspace == 25) {
       return
    }

if (player == .Player1) {

        if (nextspace == currentSpacePlayer2Piece1) {

            for node in children {

                if node.name == ("5") {

                 let moveAction:SKAction = SKAction.move(to: node.position, duration: 0.5)

                    Player2Piece1.run(moveAction) {
                    print("It Happened")
                }
                    self.currentSpacePlayer2Piece1 = 5   
                    player1Moves += 1
                }
            }

        } else if (nextspace == currentSpacePlayer2Piece2) { ..........(Continue)

Любая помощь будет действительно полезна, спасибо.

...