2022年大年初八,正式开工大吉啦!我的技术输出路线也准备在今天正式开始营业。首先咱们今天就用 Apple 的 SpriteKit 2D 引擎给大家画一个小烟花吧!
SpriteKit 是苹果官方推出的 2D 游戏开发引擎。它利用 Metal 来实现高性能渲染,同时提供简单的编程界面,使创建游戏变得容易。
在 Xcode 中新建 Game 工程,游戏类型选择 SpriteKit。
image
image
将事先准备好的粒子素材加入到工程之中。
image
image
image
image
初始化 SKSpriteNode 对象,并为它加上粒子特效,代码如下:
func generateNewSpriteNode(color: UIColor) -> SKSpriteNode{
let node = SKSpriteNode(color: color, size: CGSize(width: 30, height: 30))
node.position = CGPoint(x: 0, y: -500)
node.physicsBody = SKPhysicsBody(circleOfRadius: 30)
node.physicsBody?.isDynamic = true
node.physicsBody?.restitution = 0
let fire = SKEmitterNode(fileNamed: "Fire")
fire?.targetNode = self
fire?.particleColorBlendFactor = 1.0
fire?.particleColorSequence = nil
fire?.particleColor = color
node.addChild(fire!)
self.addChild(node)
return node
}
接下来就是要如何将节点发射出去,我们可以使用 applyImpulse 函数,为节点添加某一方向的脉冲力。
为了让节点能够像烟花一样散开,可以采用随机角度的发射方式,给节点施加脉冲,代码如下:
func fire(){
// create particle
let random = Int(arc4random_uniform(UInt32(self.colors.count)))
let node: SKSpriteNode = generateNewSpriteNode(color: colors[random])
let randomAngle = Int.random(in: -100...100)
node.physicsBody?.applyImpulse(CGVector(dx: randomAngle, dy: 300))
}
开启一个定时器,让节点能够每隔一段时间就自动发射节点,让烟花看起来更饱满更绚丽,代码如下:
// 定时器
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { time in
self.fire()
}
好了,一个小烟花就做好了,来看下效果吧!
image
本篇文章到此就结束了,虽然篇幅比较短,但是里面却包含了游戏客户端引擎的一些常用知识点,粒子特效,物体碰撞,刚体,向量等。这些内容和我们日常接触的 iOS 开发还是有些区别的,感兴趣的同学可以自己创建一个工程体验一下。最后,新的一年祝大家开工大吉,一帆风顺,升职加薪,Bug 全部退散。
项目地址:https://github.com/ShenJieSuzhou/Fireworks
本文分享自 HelloWorld杰少 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!