【发布时间】:2020-01-02 01:23:22
【问题描述】:
我是 iOS 编程新手,几乎没有使用 SpriteKit 的经验,所以如果这是一个荒谬的问题,请原谅我。
我一直在尝试用二维数组制作一个基本网格,我更愿意从左上角使用它0, 0。
在研究了 UIKit 和 SpriteKit 之间坐标系的差异之后,我遇到了 this answer 关于 Converting Between View and Scene Coordinates 但它似乎并没有像我想象的那样改变 y 值。我猜我没有正确使用它,或者这不是它的本意,我不知道。
当我尝试这个时:
let convertedCoordinates = convert(cellCoordinates, to: grid)
print(cellCoordinates.y, convertedCoordinates.y)
它似乎对 y 值没有任何影响。
我发现当我在let cellCoordinates = CGPoint(x: cx, y: cy) 行中更改为“y: -cy”时
然后它似乎确实按我希望的方式工作,但我不知道这是否是唯一的解决方案,或者这样做是否会在更复杂的情况下按预期工作。
这是我正在使用的代码:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
var background: SKShapeNode!
background = SKShapeNode(rectOf: CGSize(width: frame.size.width, height: frame.size.height))
background.fillColor = SKColor.lightGray
self.addChild(background)
let margin = CGFloat(50)
let width = frame.size.width - margin
let height = frame.size.height - margin
let centerX = frame.midX - width / 2
let centerY = frame.midY - height / 2
var grid: SKShapeNode!
grid = SKShapeNode(rectOf: CGSize(width: width, height: height))
grid.strokeColor = SKColor.clear
self.addChild(grid)
let numRows = 2
let numCols = 3
let cellWidth = width / CGFloat(numCols)
for r in 0..<numRows {
for c in 0..<numCols {
let cx = centerX + (cellWidth / 2) + (CGFloat(c) * cellWidth)
let cy = centerY + (cellWidth / 2) + (CGFloat(r) * cellWidth)
//***
let cellCoordinates = CGPoint(x: cx, y: cy)
//***
let cellNode = SKShapeNode(rectOf: CGSize(width: cellWidth, height: cellWidth))
let convertedCoordinates = convert(cellCoordinates, to: grid)
print(cellCoordinates.y, convertedCoordinates.y)
cellNode.strokeColor = SKColor.black
cellNode.lineWidth = 5
cellNode.fillColor = SKColor.darkGray
cellNode.position = convertedCoordinates
let textNode = SKLabelNode(text: String("\(r),\(c)"))
textNode.fontName = "Menlo"
textNode.fontSize = 60
textNode.verticalAlignmentMode = .center
textNode.position = convertedCoordinates
grid.addChild(cellNode)
grid.addChild(textNode)
}
}
}
}
【问题讨论】:
标签: swift xcode sprite-kit coordinate-systems