gpt4 book ai didi

iOS 使用 CAEmitterLayer 创建落叶动画

转载 作者:可可西里 更新时间:2023-11-01 01:25:17 26 4
gpt4 key购买 nike

我想创建一个树叶飘落的动画这是我的代码:

 private func setupEmitter() {


let size = self.bounds.size

let emitter = CAEmitterLayer()
emitter.emitterSize = CGSize(width: size.width, height: 1)
emitter.emitterPosition = CGPoint(x: size.width / 2, y: -100)
emitter.emitterShape = kCAEmitterLayerLine
self.layer.addSublayer(emitter)

//SHAPE 1
let shape1 = CAEmitterCell()
shape1.birthRate = 10
shape1.lifetime = 7
shape1.lifetimeRange = 2
shape1.velocity = 110
shape1.velocityRange = 10
shape1.emissionLongitude = CGFloat(M_PI)
shape1.emissionRange = CGFloat(M_PI_4)
shape1.spin = 0.2
shape1.spinRange = 0
shape1.scaleSpeed = -0.05
shape1.scale = -0.3
shape1.scaleRange = -0.1
shape1.contents = UIImage(named: "shape1")?.cgImage


//SHAPE 2
let shape2 = CAEmitterCell()
shape2.birthRate = 10
shape2.lifetime = 7
shape2.lifetimeRange = 2
shape2.velocity = 110
shape2.velocityRange = 90
shape2.emissionLongitude = CGFloat(M_PI)
shape2.emissionRange = CGFloat(M_PI_4)
shape2.spin = 0.2
shape2.spinRange = 0.5
shape2.scaleSpeed = -0.05
shape2.scale = -0.35
shape2.scaleRange = 0
shape2.contents = UIImage(named: "shape2")?.cgImage

emitter.emitterCells = [shape1, shape2]


}

我从上面的代码中得到了什么:

画出我想要达到的效果:

那么我怎样才能更新我的代码来实现我想要的(接受 Objective-C 代码)?

最佳答案

不幸的是,这并不容易,也不简单,我也不能简单地说“这是执行此操作的代码!”

有多种方法可以实现目标,但没有一种是理想的,而且都以不同的方式变得棘手。

树叶的这些运动,当它们飘落时,它们是否达到了一个速度,在这个速度下它们变得具有空气动力学效率,停滞然后再次下落......它要么是您需要的物理系统,要么是编码为对下降速率的响应的行为.

物理:

核心动画粒子没有足够的物理响应能力来执行此操作,因此您需要使用受力和场组合影响的 SKSpriteNodes,或 CALayersUIKit Dynamics 力和场变化的影响。

这两个东西几乎是一样的:CALayersSKSpriteNodes 的更强大和有趣的变体,而 UIKit Dynamics 更像是与 SKPhysics 相同。

但是......如果你想走这条路,构建你自己的“粒子”系统来响应力和场,我强烈建议使用 SceneKit 的粒子,因为它们具有旋转(3D)能力粒子,内置,它是一个在处理许多不同的粒子发射器时非常有效的系统,每个粒子发射器都有自己的响应场。

算法:

这涉及到创建随机化的弧形到失速,然后加速向下进入另一个弧形,空气动力学影响,以及随后的失速,一遍又一遍。

这也需要自定义粒子,因为我认为没有一种方法可以充分直接影响 CAEmitter 粒子,也没有 SpriteKit 或 SceneKit 的粒子。

这意味着您必须在 OpenGL 中创建四边形、作为树叶简单图像的 CALayer、作为树叶的 SKSpriteNodes,或者在 SceneKit 中创建具有树叶纹理的四边形。

在每种情况下,您需要的层数或对象数与您需要的叶子数一样多。

CALayers 的优势在于它们内置了 3D 旋转,而且您似乎已经对 Core Animation 有了一些掌握。

关于iOS 使用 CAEmitterLayer 创建落叶动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41852858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com