SKScene

作者: 9026 | 来源:发表于2020-04-14 17:31 被阅读0次

    SKScene 场景类

    前缀为SK是SpriteKit的缩写。
    SKScene是SpriteKit树节点(SKNode)中的根节点,SKScene使得页面有了动效,特效,使得页面变得生动活泼。它有点像UIScorllView中的content。想要在页面上看到一个scene 需要使用sKView.presentScene。

    SKScene对象的初始化
    #从文件中初始化       Xcode's File menu > New... > File > (choose your platform tab) > SpriteKit Scene.
    [init(fileNamed:)]
    //
    let scene =SKScene(fileNamed:"MyScene")
    skView.presentScene(scene)
    ----------------------------------------------------------------
    #给定一个大小来初始化
    init(size:[CGSize]  #这里的size 不是页面的大小,是可见区域的大小。
    size 的(0,0)#点在屏幕的左下角。默认的size为(1024 * 768)
    
    SKScene在View 中的显示填充模式
    属性名称 说明
    SKSceneScaleModeFill 默认模式,场景全部显示出来,会导致场景变形
    SKSceneScaleModeAspectFill 场景比例不变,填充整个视图,会显示部分场景
    SKSceneScaleModeAspectFit 场景比例不变,全部显示在视图当中
    SKSceneScaleModeResizeFill 场景与视图的尺寸相匹配

    note:将scaleMode属性设置为SKSceneScaleMode.resizeFill。SpriteKit会自动调整场景的大小(size 属性)修改了size 属性系统会调用 didChangeSize(_:) 可以在这个方法中添加修改了大小后的逻辑。比如边缘检测,资源文件的替换等

    SKScene在View 中的可见范围

    改变锚点anchorPoint 可以改变可见区域。
    camera默认为nil,当设置了camera节点后锚点不起作用,锚点为默认左下角。

    let cameraNode = SKCameraNode()
    cameraNode.position = CGPoint(x: scene.size.width / 2,
                                  y: scene.size.height / 2)
    scene.addChild(cameraNode)
    scene.camera = cameraNode
    
    SKScene的事件改变

    func sceneDidLoad()
    ··场景已经加载
    func didChangeSize(CGSize)
    ··场景大小改变
    func willMove(from: SKView)
    ··场景将要移除
    func didMove(to: SKView)
    ··场景已经移除

    SKScene的刷新帧事件循环
    note:设置delegate

    Responding to Frame-Cycle Events
    func update()
    每一帧都会调用一次,场景变化执行的刷新动作。Tells your app to perform any app-specific logic to update your scene.
    func didEvaluateActions()
    每一帧都会调用一次,任何的动作都会被评估,下一帧的动作不会被计算在当前帧执行。在didSimulatePhysics之前调用。Tells your app to peform any necessary logic after scene actions are evaluated.
    func didSimulatePhysics()
    每一帧都会调用一次,场景模拟物理效果改变。Tells your app to peform any necessary logic after physics simulations are performed.
    func didApplyConstraints()
    每一帧都会调用一次,场景约束发生改变。Tells your app to peform any necessary logic after constraints are applied.
    func didFinishUpdate()
    每一帧都会调用一次,场景完成刷新。Tells your app to peform any necessary logic after the scene has finished all of the steps required to process animations.

    设置背景音乐
    let audio = SKAudioNode(fileNamed: "drums.mp3")
    
    spriteKitViewController.scene.addChild(audio)
    
    坐标系转换

    func convert​Point(from​View:​ CGPoint)
    将视点坐标转换为场景坐标。
    func convert​Point(to​View:​ CGPoint)
    将点从场景坐标转换为查看坐标。

    相关文章

      网友评论

          本文标题:SKScene

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