Я задавал этот вопрос ранее на здесь , но не смог объяснить, потому что не очень хорошо понял эту проблему.Но теперь, исследуя и пытаясь найти решение, я понял его больше.
Моя главная проблема - у меня есть функция, чтобы проверить, если два игрока находятся на одной позиции, если это так, а затем переместить первого игрока в его домашнюю локацию, которая работаетраньше было хорошо, но после того, как 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)
Любая помощь будет действительно полезна, спасибо.