SKScene
的原点在左下角。
但我尝试从一个包含0和1矩阵的文件中进行简单级别的加载。虽然0不算什么,但1表示墙(简单矩形(。
由于文件的内容显然是从左上到右下的,我想在场景中从左上绘制。
但文件中的第一个角色是在场景的左下角绘制的。我试着将场景的yScale设置为-1,希望它能反转y轴,,但没有成功。
在这个SKScene
上,我总是从左上角开始画画,最干净的方法是什么?我仍然想把我的anchorPoint
保持在0.5,0.5。
因此,从左上角开始的绘图将位于x=-widthOfScreen/2
和y=heightOfScreen/2
我不确定这是否是你想要的,但如果你只想改变坐标系,你可以为CGPoint创建一个扩展,比如
//CGPoint+SpriteKit.swift
extension CGPoint {
func flipCoordinates() -> CGPoint {
return CGPoint(x: x, y: UIScreen.mainScreen().bounds.height - y)
}
}
我认为这应该有效,因为你的锚点是(0.5,0.5(
由于SKSpriteNode允许您使用-1的比例翻转其内容,因此您可以将所有节点放置在yScale为-1的主SKSpriteNode下。
final class GameScene: SKScene
{
var masterNode:SKSpriteNode! = nil
override func addChild(node: SKNode)
{
if masterNode == nil
{
masterNode = SKSpriteNode()
masterNode.position = CGPoint(x:0, y:size.height)
masterNode.anchorPoint = CGPointZero
masterNode.yScale = -1
super.addChild(masterNode)
}
masterNode.addChild(node)
}
}
请注意,如果/当大小发生变化时,需要保持主节点的y位置与视图大小对齐。
类似于Alain T的答案,但使用SKCameraNode
和yScale = -1
,因此不需要覆盖addChild
函数或具有额外的节点层。
let localCamera = SKCameraNode()
override func didMove(to view: SKView) {
super.didMove(to: view)
localCamera.yScale = -1
localCamera.position = CGPoint(x: size.width/2, y: size.height/2)
addChild(localCamera)
self.camera = localCamera
// ...
}