ARKIT

SpriteKit(1) - 坐标系

2017-07-27  本文已影响201人  li_礼光

首先

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

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

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

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

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

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


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

anchorPoint(锚点)

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

position(坐标)

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

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

场景的坐标系.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,场景中间位置)

小总结 :

上一篇下一篇

猜你喜欢

热点阅读