使用 Swift 在 Sprite Kit 中构建棋盘游戏? [关闭]

Posted

技术标签:

【中文标题】使用 Swift 在 Sprite Kit 中构建棋盘游戏? [关闭]【英文标题】:Building a chess board game in Sprite Kit using Swift? [closed] 【发布时间】:2014-11-21 21:09:37 【问题描述】:

在使用 Swift 的 Sprite Kit 中,我正在尝试构建一个棋盘(实际上是一个类似国际象棋的棋盘/瓷砖网格)。那么总的来说,我应该如何创建一个方形网格板?

我已经做了很多研究,并通过多维数组研究了一些类似于国际象棋棋盘的高级概念的例子,但它仍然没有真正解释如何在 Sprite Kit 中直观地表示它,更重要的是,如何将视觉表示映射到多维数组中的字母+数字表示...

有什么想法吗?

如果有人能回答上述问题中的至少一点/部分,将不胜感激!非常感谢您!

【问题讨论】:

任何语言的国际象棋游戏教程都可以用来理解。 以下在 Swift 中的回答非常有帮助。 【参考方案1】:

在 SpriteKit 中绘制棋盘的一种方法是在适当的位置添加交替的白色和黑色精灵节点。这是一个如何做到这一点的示例。

    override func didMoveToView(view: SKView) 
        self.scaleMode = .ResizeFill

        // Draw the board
        drawBoard()
        // Add a game piece to the board
        if let square = squareWithName("b7") 
            let gamePiece = SKSpriteNode(imageNamed: "Spaceship")
            gamePiece.size = CGSizeMake(24, 24)
            square.addChild(gamePiece)
        
        if let square = squareWithName("e3") 
            let gamePiece = SKSpriteNode(imageNamed: "Spaceship")
            gamePiece.size = CGSizeMake(24, 24)
            square.addChild(gamePiece)
        
    

此方法绘制棋盘。

    func drawBoard() 
        // Board parameters
        let numRows = 8
        let numCols = 8
        let squareSize = CGSizeMake(32, 32)
        let xOffset:CGFloat = 50
        let yOffset:CGFloat = 50
        // Column characters
        let alphas:String = "abcdefgh"
        // Used to alternate between white and black squares
        var toggle:Bool = false
        for row in 0...numRows-1 
            for col in 0...numCols-1 
                // Letter for this column
                let colChar = Array(alphas)[col]
                // Determine the color of square
                let color = toggle ? SKColor.whiteColor() : SKColor.blackColor()
                let square = SKSpriteNode(color: color, size: squareSize)
                square.position = CGPointMake(CGFloat(col) * squareSize.width + xOffset,
                    CGFloat(row) * squareSize.height + yOffset)
                // Set sprite's name (e.g., a8, c5, d1)
                square.name = "\(colChar)\(8-row)"
                self.addChild(square)
                toggle = !toggle
            
            toggle = !toggle
        
    

该方法返回指定名称的方形节点

    func squareWithName(name:String) -> SKSpriteNode? 
        let square:SKSpriteNode? = self.childNodeWithName(name) as SKSpriteNode?
        return square
    

【讨论】:

这正是我想要的! 0x141E,感谢您的详细回复。

以上是关于使用 Swift 在 Sprite Kit 中构建棋盘游戏? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 在 Sprite Kit 游戏中重置高分

使用 Sprite Kit 和 Swift 在游戏中显示当前分数

如何在 Sprite Kit / Swift 中将文本环绕在一个圆圈中

swift 2 sprite-kit 中的多行标签?

如何使用 Swift 2(Xcode 7)在我的 Sprite Kit 游戏中为背景音乐设置静音按钮?

在 Swift + Sprite Kit 中更改场景的最简单方法 [关闭]