我无法将SKNode集中在我的主场景中。这(下面的照片)是一个包含16个SKLabelNodes的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
}
}
我在结构中也有这个函数来排列网格中的节点。 (下标也在结构上,但我认为没有必要把它放在这里)
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)
答案 0 :(得分:3)
你设置的内容太多了,在发布一些代码之前我们不会知道。
将屏幕上的SKNode中心设置为非常简单,并且内部没有任何区别。
最大因素是您的场景定位点设置为。
以下是场景定位点设置为0,0并在屏幕中输入容器(SKNode)的示例
let size = CGSize(width: 50, height: 50)
let container = SKNode()
container.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
for row in -1...1 {
for col in -1...1 {
let label = SKLabelNode()
label.text = "0"
label.position = CGPoint(x: size.width * CGFloat(row), y: size.height * CGFloat(col))
container.addChild(label)
}
}
addChild(container)
**** **** EDIT
问题不在于您的节点或anchorPoints。问题出在你的arrangeButtonsInGrid函数中。
要考虑的事情,如果您遇到SKNode功能有限的问题,只需将其转换为SKSpriteNode(我通常会这样做进行测试并将其背景颜色设置为红色,以便我可以准确地看到它的布局位置)< / p>
可能有一千种不同的方法来解决您的问题,这里只是一个简单的快速解决方案(另一种选择可能是将容器设为SKSpriteNode并将其锚点设置为零)。看起来你正在编译Swift 2.3或3的代码,所以你可能需要调整一些东西
func arrangeButtonsInGrid(padding: Int) {
var yPosition = -(rows / 2)
for row in 0..<rows {
var xPosition = -(columns / 2)
for col in 0..<columns {
self[col, row].position = CGPoint(x: padding * xPosition, y: padding * yPosition)
xPosition += 1
}
yPosition += 1
}
}