我正在研究CAEmitterLayer
和CAEmitterCell
的工作方式。我的总体尝试是使用CAEmitterLayer在屏幕上仅一个粒子。在调整birthRate
和lifeTime
的同时,理想情况下,我希望将一个粒子无限期地保留在屏幕上,并在周围“漂浮”。顺便说一句,我还想让粒子从显示器的边缘“反弹”,而不是浮在屏幕上(我对碰撞还不太熟悉)。
这是我当前的代码:
let snowEmitterLayer = CAEmitterLayer()
snowEmitterLayer.emitterPosition = CGPoint(x: view.bounds.width / 2.0, y: -view.bounds.height)
snowEmitterLayer.emitterSize = CGSize(width: view.bounds.width, height: 0)
snowEmitterLayer.emitterShape = CAEmitterLayerEmitterShape.line
snowEmitterLayer.beginTime = CACurrentMediaTime()
snowEmitterLayer.timeOffset = 10
let cell = makeEmitterCell()
snowEmitterLayer.emitterCells = [cell]
snowEmitterLayer.birthRate = 1
snowEmitterLayer.emitterMode = .points
snowEmitterLayer.lifetime = Float.infinity
view.layer.addSublayer(snowEmitterLayer)
对于我的手机:
func makeEmitterCell() {
let flakeEmitterCell = CAEmitterCell()
let myImage = Bundle.main.path(forResource: "bokeh_circle@2x", ofType: "png")
flakeEmitterCell.contents = UIImage(contentsOfFile: myImage!)?.cgImage
flakeEmitterCell.scale = 0.06
flakeEmitterCell.scaleRange = 0.3
flakeEmitterCell.emissionRange = .pi
flakeEmitterCell.lifetime = Float.infinity
flakeEmitterCell.birthRate = 1
flakeEmitterCell.velocity = -30
flakeEmitterCell.velocityRange = 0
flakeEmitterCell.yAcceleration = 5
flakeEmitterCell.xAcceleration = 5
flakeEmitterCell.spin = -0.5
flakeEmitterCell.spinRange = 1.0
return flakeEmitterCell
}
我不完全确定我的问题是否是我的牢房正在无穷远,但是最终出现在屏幕外,或者这些牢房在不该死的时候死了。总体而言,这还会导致创建几个(5-6)粒子,但是我只希望一个粒子永远不会离开屏幕。这有可能实现吗?