您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页SpriteKit(1) - 坐标系

SpriteKit(1) - 坐标系

来源:二三娱乐

首先

有个比较有意思的地方.创建一个场景有两种方式.

  • 第一种: let scene = SKScene(fileNamed: "GameScene")!
  • 第二种: let scene = GameScene() //GameScene是SKScene的子类

这两种方式都是创建一个场景
但是!!!,它们是有区别的,坐标系的参考就发生了变化.

  • 第一种

scene为nil,因为没有.sks sks文件的坐标系已经固定
  • 第二种

直接let scene = GameScene(),这种创建方式的好处是不需要再附加一个.sks文件.但是坐标系为左下角为原点.

重要 : 后续所有代码都按照第二种方式创建场景!

图方便,不用创建sks文件`


以下以第一种来创建一个场景.

anchorPoint(锚点)

定义与节点位置对应的精灵中的点。
您可以在单位坐标空间中指定此属性的值。 默认值为(0.5,0.5)
这意味着精灵位于其位置的中心。

position(坐标)

节点在其父系坐标系中的位置。
默认值为(0.0,0.0)。

一直不理解,自己经过测试,发现一些比较有意思的地方.相对于UIKit的frame有点不一样.

  • 在SKScene中,Scene的坐标系是固定的.中心点为原点.
    这个坐标系是固定的,可以理解为绝对坐标系.也就是说,在scene中,所有的节点都是参考这样的一个坐标系来布局坐标和锚点
场景的坐标系.png

以下用代码尝试

  • 创建两个大小不一样的节点(不设置坐标和锚点)
    func createNode() {
        let node = SKSpriteNode(color: UIColor.red, size: CGSize(width: 800, height: 800))
        node.color = UIColor.red
        
        let node2 = SKSpriteNode(color: UIColor.red, size: CGSize(width: 400, height: 400))
        node2.color = UIColor.blue

        self.addChild(node)
        self.addChild(node2)
    }
根据不同设备来看scene的frame,这里用的是iPhone6sp
  • 设置蓝色的节点的坐标(不设置锚点)
   func createNode() {
        let node = SKSpriteNode(color: UIColor.red, size: CGSize(width: 800, height: 800))
        node.color = UIColor.red
        
        let node2 = SKSpriteNode(color: UIColor.red, size: CGSize(width: 400, height: 400))
        node2.color = UIColor.blue
        node2.position = CGPoint(x: -1024, y: 0)

        self.addChild(node)
        self.addChild(node2)
    }
设置坐标
  • 设置蓝色的节点的锚点
   func createNode() {
        let node = SKSpriteNode(color: UIColor.red, size: CGSize(width: 800, height: 800))
        node.color = UIColor.red
        
        let node2 = SKSpriteNode(color: UIColor.red, size: CGSize(width: 400, height: 400))
        node2.color = UIColor.blue
        node2.anchorPoint = CGPoint(x: 0, y: 0.5)
        node2.position = CGPoint(x: -1024, y: 0)

        self.addChild(node)
        self.addChild(node2)
    }
设置锚点

小总结 :

1.简单的理解坐标和锚点的配合使用
2.要从scene的绝对坐标来考虑节点具体的位置.(我看资料都没有提到这个细节,要从scene来参考.)


以下以第二种来创建一个场景.

同样的代码创建.

let node = SKSpriteNode(color: UIColor.red, size: CGSize(width: 800, height: 800))
node.color = UIColor.red
        
let node2 = SKSpriteNode(color: UIColor.red, size: CGSize(width: 400, height: 400))
node2.color = UIColor.blue
        
self.addChild(node)
self.addChild(node2)
设备效果
Debug View Hierarchy方式查看

修改一下position来再次验证

node.position = CGPoint(x: 0, y: size.height * 0.5)
修改坐标(0,场景中间位置)

小总结 :

  • 场景的坐标系变成了从左下角为起点了.

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务