【发布时间】:2016-10-20 21:34:58
【问题描述】:
我无法将 SKNode 置于主场景的中心。这个(下图)是一个包含 16 个 SKLabelNode 的 SKNode。在代码中,它位于 (0, 0) 位置,但正如您在图像上看到的那样,它似乎没有居中。此外,Apple 文档没有说明 SKNodes 上的 anchorPoint。
那么,我怎样才能使 SKNode 在场景中居中?
这是代码。
我有一个将标签存储在数组中的结构。我将它们初始化为 0。
struct NumberButtonsMatrix {
let rows: Int, columns: Int
var grid: [NumberButton]
init(rows: Int, columns: Int) {
grid = [NumberButton]()
self.rows = rows
self.columns = columns
for _ in 0..<(rows*columns) {
let button = NumberButton(number: 0)
grid.append(button)
}
}
}
func indexIsValid(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
func indexIsValid(index :Int) -> Bool {
return index >= 0 && index < rows*columns
}
subscript(row: Int, column: Int) -> NumberButton {
get {
assert(indexIsValid(row: row, column: column), "Index not valid")
return grid[(row*columns) + column]
}
set {
assert(indexIsValid(row: row, column: column), "Index not valid")
grid[(row*columns) + column] = newValue
}
}
subscript(index: Int) -> NumberButton {
get {
assert(indexIsValid(index: index), "Index not valid")
return grid[index]
}
set {
assert(indexIsValid(index: index), "Index not valid")
grid[index] = newValue
}
}
我在将节点排列成网格的结构中也有这个功能。 (下标也在struct上,但我觉得没必要放在这里)
func arrangeButtonsInGrid(separation: Int) {
for i in 0..<rows {
for j in 0..<columns {
self[i, j].position = CGPoint(x: -separation*i, y: separation*j)
}
}
}
然后,我有一个名为 GameBoard 的类,它是 SKNode 的子类,所有 SKLabel 都在其中。
class GameBoard: SKNode {
var numberButtons: NumberButtonsMatrix
init(rows: Int, columns: Int) {
numberButtons = NumberButtonsMatrix(rows: rows, columns: columns)
super.init()
numberButtons.arrangeButtonsInGrid(separation: 144)
for i in 0..<(rows*columns) {
numberButtons[i].number = i
self.addChild(numberButtons[i])
}
}
最后,我将它们添加到我的场景中。
var gameBoard = GameBoard(rows: 4, columns: 4)
gameBoard.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
self.addChild(gameBoard)
【问题讨论】:
-
您应该发布用于实现此节点和标签的代码,以便人们可以验证它是如何设置的
-
请同时加上下标,没有下标这段代码无法编译
标签: swift sprite-kit sknode