首页 > 解决方案 > 在 Swift 中移动 SKNode 位置 - Mancala 游戏

问题描述

你好

只是为了提供一些背景信息,我正在尝试在 ios 中制作 Mancala 游戏。我在 GameScene.sks 文件中创建了 UI。

xCode 截图

我有每个 SKNode 坑(pit0 是左下方的坑,从那里逆时针编号)编号为它内部的另一个 SKNode,称为芯片,其中包含该坑的所有芯片 SKSpriteNode。我正在努力做到这一点,以便当按下其中一个坑时,所有筹码都会移动 4 个坑。

class GameScene: SKScene {

var touchLocation = CGPoint()
var gameBoard = SKNode()
var pits: Array<Pit> = Array(repeating: Pit(), count: 14)

override func sceneDidLoad() {
    setUpGameBoard()
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        touchLocation = touch.location(in: gameBoard)

        let currentPit: Pit = ((gameBoard.atPoint(touchLocation).parent?.parent) ?? pits[0]) as! Pit
        print(currentPit)

        for i in 0..<14 {
            if currentPit == pits[i] {

                let move1 = SKAction.move(to: pits[i+1].position, duration: 0.5)
                let move2 = SKAction.move(to: pits[i+2].position, duration: 0.5)
                let move3 = SKAction.move(to: pits[i+3].position, duration: 0.5)
                let move4 = SKAction.move(to: pits[i+4].position, duration: 0.5)

                let waitAction = SKAction.wait(forDuration: 0.1)

                let moveSequence = SKAction.sequence([move1, waitAction, move2, waitAction, move3, waitAction, move4])

                currentPit.chipsNode.run(moveSequence)
            }
        }

    }
}

func setUpGameBoard() {
    gameBoard = childNode(withName: "gameBoard")!

    for i in 0..<14 {
        pits[i] = (childNode(withName: "gameBoard")?.childNode(withName: "pit\(i)"))! as! Pit
        pits[i].chipsNode = pits[i].childNode(withName: "chips")!
        pits[i].chips = pits[i].childNode(withName: "chips")?.children as! [Chip]

    }
    print(pits)
}

此代码移动筹码,但仅将它们稍微移动到它们应该去的位置。我正在尝试逆时针移动包含所有芯片 4 个坑的芯片 SKNode。如果可以的话,请帮助我,如果您对我试图对此发表评论感到困惑。

按下pit3后的结果截图

标签: iosswiftsprite-kitskspritenodesknode

解决方案


推荐阅读