45d85e13d6ffec74e68837f0f861ff49
SwiftUI SpriteKit 之 SKScene入门实现上半部显示区,下半部控制区

实战需求

SwiftUI 特效之全屏烟花效果sks

本文价值与收获

看完本文后,您将能够作出下面的界面

截屏2021-02-08 上午10.41.21.png

截屏2021-02-08 上午10.41.21.png

Jietu20210208-104137.gif

Jietu20210208-104137.gif

看完本文您将掌握的技能

  • SKScene 组织所有活动SpriteKit
class FireworksScene: SKScene
  • SKEmitterNode
 let fireworks = SKEmitterNode(fileNamed: "Fireworks.sks")

基础知识

SKScene

一个组织所有活动SpriteKit内容的对象。

宣言

class SKScene : SKEffectNode

总览

一个SKScene对象代表SpriteKit中内容的场景。场景是SpriteKit节点(SKNode)树中的根节点。这些节点提供场景动画并渲染以显示的内容。要显示一个场景,你从目前它SKView,SKRenderer或。WKInterfaceSKScene

SKScene是的子类,并使某些效果可以应用于整个场景。尽管将效果应用于整个场景可能是一项昂贵的操作,但是创造力和独创性可能会帮助您找到一些有趣的方式来使用效果。SKEffectNode

SKEmitterNode

各种粒子效果的来源。

宣言

class SKEmitterNode : SKNode

总览

对象是自动创建并呈现小颗粒精灵的节点。粒子由SpriteKit私有拥有-您的游戏无法访问生成的精灵。例如,您不能将物理形状添加到粒子。发射器节点通常用于产生烟,火,火花和其他粒子效果。甲粒子类似于一个对象; 它渲染经过大小调整,着色和融合到场景中的带纹理或无纹理的图像。但是,粒子与精灵在两个重要方面有所不同:SKEmitterNodeSKSpriteNode

粒子的纹理始终均匀地拉伸。

SpriteKit中的对象不表示粒子。这意味着您不能对粒子执行与节点有关的任务,也不能将物理物体与粒子关联以使它们与其他内容相互作用。尽管没有可见的类表示由发射器节点添加的粒子,但是您可以认为粒子具有与其他任何对象一样的属性。

粒子是纯粹的视觉对象,它们的行为完全由创建它们的发射器节点定义。发射器节点包含许多属性来控制其生成的粒子的行为,包括:

粒子的出生率和寿命。您还可以指定渲染粒子的顺序以及在关闭发射器自身之前创建的最大粒子数。

粒子的起始值,包括其位置,方向,颜色和大小。您可以选择使这些起始值随机化。

在粒子的整个生命周期中要应用的更改。通常,将这些值指定为随时间变化的速率。例如,您可以指定粒子以特定的速度旋转,以弧度每秒为单位。发射器自动更新每帧的粒子数据。在大多数情况下,您还可以使用关键帧序列创建更复杂的行为。例如,您可以为粒子指定关键帧序列,以使其从小开始,放大到更大的大小,然后在染色前缩小。


实战代码

1、主界面

import SwiftUI

struct ContentView: View {
    var body: some View {
        FireworksView(level: DifficultyLevel.hard)
    }
}

2、烟花效果
```
import SwiftUI
import SpriteKit
import Combine

struct FireworksView: View {
var level: DifficultyLevel

var body: some View {
    GeometryReader { geometry in
        SpriteView(
            scene: FireworksScene(size: geometry.size, count: count),
            options: .allowsTransparency
        )
        .ignoresSafeArea()
        .allowsHitTesting(false)
    }
}
top Created with Sketch.