美文网首页ARKIT
SpriteKit(1) - 坐标系

SpriteKit(1) - 坐标系

作者: li_礼光 | 来源:发表于2017-07-27 16:06 被阅读201次

首先

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

  • 第一种: 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,场景中间位置)

小总结 :

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

相关文章

  • SpriteKit从0到入门

    SpriteKit(0) - 序言SpriteKit(1) - 坐标系SpriteKit(2) - 场景过渡动画S...

  • SpriteKit(1) - 坐标系

    首先 有个比较有意思的地方.创建一个场景有两种方式. 第一种: let scene = SKScene(fileN...

  • SpriteKit中的坐标系简要

    在学习SpriteKit做2D游戏开发之前,我看了一点Cocos2D的游戏开发代码,发现Cocos2D和Sprit...

  • SpriteKit的纹理集

    SpriteKit纹理集 1、SpriteKit纹理集的使用非常简单,只需要将需要打包的图片放到一个文件夹,以.a...

  • iOS SpriteKit框架初探

    提要 SpriteKit框架是做什么的: SpriteKit is a framework that’s used...

  • [译] 如何在 Swift 3 中用 SpriteKit 框架编

    原文地址:How To Build A SpriteKit Game In Swift 3 (Part 1) 原文...

  • OpenGL坐标系理解

    1.在OenGL中有5种坐标系 局部坐标系(物体的坐标系) 世界坐标系(-1 ~ 1之间) 观察空间 裁剪空间 屏...

  • OC SCNPlane播放视频

    创建Game项目 引用#import 以下全部代码: SCNSc...

  • SpriteKit 使用

    Scene SpriteKit 是基于 Scene 来组织的,每个 SKView(专门用来呈现 SpriteKit...

  • coreGraphics

    1. iOS 坐标系 NSView坐标系 : 左手坐标系 原点左上角UIView坐标系 : 左手坐标系 原点左...

网友评论

    本文标题:SpriteKit(1) - 坐标系

    本文链接:https://www.haomeiwen.com/subject/tnizkxtx.html