SpriteKit(8) - 粒子系统

粒子系统

  • 加载粒子文件

import SpriteKit
import GameplayKit

class GamePartical: SKScene {
    var snow :SKEmitterNode!
    override func didFinishUpdate() {
        self.size = UIScreen.main.bounds.size
        snow = SKEmitterNode(fileNamed: "snow.sks")
        snow.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
        self.addChild(snow!)
    }
}
SpriteKit(8) - 粒子系统_第1张图片
创建粒子.png
SpriteKit(8) - 粒子系统_第2张图片
粒子编辑器
SpriteKit(8) - 粒子系统_第3张图片
模拟器效果
  • 代码创建

import SpriteKit
import GameplayKit

class GamePartical: SKScene {
    var emitter : SKEmitterNode!
    override func didMove(to view: SKView) {
        let rainTexture = SKTexture(imageNamed: "zombie1")
        emitter = SKEmitterNode()
        emitter.particleTexture = rainTexture
        emitter.particleBirthRate = 10
        emitter.particleColor = UIColor.white
        emitter.particleSpeed = -450
        emitter.particleScaleRange = 150
        emitter.particleLifetime = 2
        
        emitter.particleScale = 0.2
        emitter.particleScaleRange = 0.5
        emitter.particleAlpha = 0.7
        emitter.particleAlphaRange = 0.5
        
        emitter.emissionAngle = 0
        emitter.emissionAngleRange = CGFloat.pi * 2
        
        emitter.particleColorBlendFactor = 1
        emitter.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
        self.addChild(emitter)
    }
}
SpriteKit(8) - 粒子系统_第4张图片
粒子效果

PS : 太多的粒子会大量占用系统资源,让游戏变卡,所以使用时要注意


使用关键帧序列配置粒子属性

  override func touchesBegan(_ touches: Set, with event: UIEvent?) {
        let scaleSequence = SKKeyframeSequence(keyframeValues: [0.2,0.9,0.1], times: [0.0, 0.5, 0.75])
        emitter.particleScaleSequence = scaleSequence
    }
关键帧序列配置粒子属性

PS : 也就是改变粒子的运动内容.

为粒子添加动作

  • 使用SKAction方式

override func touchesBegan(_ touches: Set, with event: UIEvent?) {
        let moveAction = SKAction.moveBy(x: 300, y: 0, duration: 1)
        emitter.run(moveAction)
    }
移动效果
  • 使用partcleAction属性添加动作

let color = SKAction.colorize(with: SKColor.green, colorBlendFactor: 0.5, duration: 1)
emitter.particleAction = color

PS : 测试了N遍,貌似用这个动作添加没有效果. 有可能是我的操作方式不对.原教材也是一样,没有效果,不会变颜色.玛德,坑爹.这种方式暂时不考虑,可能有坑

清屏操作

override func touchesBegan(_ touches: Set, with event: UIEvent?) {
        emitter.resetSimulation()
    }
清屏操作

你可能感兴趣的:(SpriteKit(8) - 粒子系统)