2014-11-21 131 views
2

在使用Swift的Sprite工具包中,我试图建立一个棋盘(实际上,象棋棋盘/瓷砖网格)。所以一般来说,我应该如何去创建一个方形网格板?使用Swift在Sprite Kit中制作棋盘游戏?

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

有什么想法?

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

+0

广场节点。 – ZeMoon 2014-11-22 05:45:01

+0

在Swift中,下面的答案是特别有用的。 – simplexity 2014-11-22 13:28:26

回答

10

在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 
    } 
+1

这正是我期待的! 0x141E,谢谢你的详细回复。 – simplexity 2014-11-22 13:24:59