2016-08-03 79 views
1

正如我们所知,SKScene的原点位于左下方。SpriteKit/SKScene:如何从左上角绘制而不是从左下角绘制?

但我尝试从包含0和1矩阵的文件进行简单的水平加载。虽然0没有任何意义,但1表示墙(简单矩形)。

由于文件的内容显然是从左上角到右下角,我想从场景的左上角进行绘制。

但是我的第一个来自文件的字符是在场景的左下角绘制的。 我试图将场景的yScale设置为-1,希望其反转y轴,但这不起作用

什么是这样的最清洁的方式SKScene我总是从左上角开始绘图?我仍然想把我的anchorPoint保持在0.5,0.5。

所以从左上角将位于x=-widthOfScreen/2y=heightOfScreen/2

+0

看看这个答案http://stackoverflow.com/a/20734093/1894067 –

+0

没了,正如我在SKScene写道yScale做不行。在控制台上获取msg:SKScene:设置SKScene的比例不起作用。 – NovumCoder

+0

有趣,但没有看到你的代码我认为在回答中的家伙不能更好地理解如何帮助你,尝试添加一些代码来回复这个问题 –

回答

1

我不知道,如果这是你要的东西,但如果你只是想改变坐标周围你可以做什么系统创建CGPoint的延伸,像

//CGPoint+SpriteKit.swift 
extension CGPoint { 
    func flipCoordinates() -> CGPoint { 
     return CGPoint(x: x, y: UIScreen.mainScreen().bounds.height - y) 
    } 
} 

我觉得应该工作,因为你的锚点(0.5,0.5)

+0

不完全是我所做的,但我绘制的瓷砖(级别)和元素时只是翻转Y坐标。因为定位点为0.5,0.5,所以我一直按照通常的方式绘制所有其他东西。但是在一点上翻转而不是改变一切是最简单的方法。谢谢。 – NovumCoder

0

由于SKSpriteNode会让你使用-1规模翻转其内容,您可以将您的所有节点的主SKSpriteNode下用的yScale绘图-1。

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) 
    } 
} 

请注意,您将需要保持masterNode与视图大小,如果/大小的变化时对准y位置。

+0

为什么使用动态分配到GameScene?这是对班级的限制,是否有一个合理的原因? –

相关问题