2016-07-22 29 views
0

我想创建一些使用粒子的活动图形,在这里我发射粒子并更改发射器位置。使用粒子创建一个特殊的图形?

问题是我无法找到一种方式来将粒子以直线水平排列。他们似乎有一些雪(重力和旋转)的影响。

有没有一种方法来绘制一个像从左到右的线的粒子?

func createParticles() 
{ 
    let particleEmitter = CAEmitterLayer() 

    particleEmitter.emitterPosition = CGPoint(x: self.center.x, y: 100) 
    particleEmitter.emitterShape = kCAEmitterLayerPoint 
    particleEmitter.emitterSize = CGSize(width: self.frame.size.width, height: 1) 

    let red = makeEmitterCellWithColor(Globals.sharedInstance.palleteRed) 
    let green = makeEmitterCellWithColor(Globals.sharedInstance.palleteRed) 
    let blue = makeEmitterCellWithColor(Globals.sharedInstance.palleteRed) 

    particleEmitter.emitterCells = [red, green, blue] 

    self.layer.addSublayer(particleEmitter) 

} 



func makeEmitterCellWithColor(color: UIColor) -> CAEmitterCell { 
    let cell = CAEmitterCell() 
    cell.birthRate = 1 
    cell.lifetime = 6.0 
    cell.lifetimeRange = 0 
    cell.color = color.CGColor 
    cell.velocity = 100 
    cell.velocityRange = 220 
    cell.emissionLongitude = CGFloat(M_PI) 
    cell.emissionRange = CGFloat(M_PI_4) 
    cell.spin = 0 
    cell.spinRange = 0 
    cell.scaleRange = 0.15 
    cell.scaleSpeed = -0.05 

    cell.contents = UIImage(named: "particle")?.CGImage 
    return cell 
} 

回答

0

我也challange类似的问题这段代码帮助我克服this.I只是试图减少雪的影响发射范围。

 let em : CAEmitterLayer = self.view.layer as! CAEmitterLayer 

     em.renderMode = kCAEmitterLayerOldestFirst 
     em.emitterShape = kCAEmitterLayerLine 
     em.emitterMode = kCAEmitterLayerSurface 
     em.emitterSize = CGSize(width: 10, height: 10) 
     em.beginTime = CACurrentMediaTime() 

     em.emitterPosition = CGPointMake(self.view.frame.width/2, self.view.frame.height/2) 

     let fireCell = CAEmitterCell() 
     fireCell.contents = UIImage(named: "pink.png")!.CGImage 
     fireCell.contentsRect = CGRect(x: 0, y: 0, width: 1.0, height: 1.0) 
     fireCell.birthRate = 5.0 
     fireCell.lifetime = 5 
     fireCell.velocity = 200 
     fireCell.scale = 1 

     fireCell.color = UIColor.blueColor().CGColor 

     // emissions angle stuff 
     fireCell.emissionLongitude = CGFloat(M_PI/2) 
     fireCell.emissionRange = CGFloat(M_PI_2/10.0) 

     em.emitterCells = [fireCell]