Управление количеством частиц в CAEmitterLayer - PullRequest
0 голосов
/ 22 сентября 2018

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

...