Я работаю над изучением того, как работают 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) частиц, но мне нужна только одна частица, которая никогда не покидает экран.Возможно ли это сделать?