OC与Swift两种实现方式基本上区别不大,主要是在一些对象或方法的调用方式不同,附带源码。

OC代码样式:

self.view.backgroundColor = [UIColor blackColor];

    

    //加载颗粒状的火花图片

    CAEmitterLayer *emitterLa = [CAEmitterLayer layer];

    emitterLa.emitterPosition = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height*(.75));//*(0.75)

    emitterLa.renderMode = kCAEmitterLayerAdditive;

    

    //在爆炸前逐渐隐藏发射颗粒

    CAEmitterCell *emitterCeRocket = [CAEmitterCell emitterCell];

    emitterCeRocket.emissionLongitude = -M_PI/2;

    emitterCeRocket.emissionLatitude = 0;

    emitterCeRocket.lifetime = 1.6;

    emitterCeRocket.birthRate = 1;

    emitterCeRocket.velocity = 400;

    emitterCeRocket.velocityRange = 100;

    emitterCeRocket.yAcceleration = 250;

    emitterCeRocket.emissionRange = M_PI/4;

    emitterCeRocket.color = CGColorCreateCopy([UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:0.5].CGColor);

    emitterCeRocket.redRange = 0.5;

    emitterCeRocket.greenRange = 0.5;

    emitterCeRocket.blueRange = 0.5;

    //设置动画效果的路径名称

    [emitterCeRocket setName:@"rocket"];

    

    //添加路径状态

    CAEmitterCell *emitterCeFly = [CAEmitterCell emitterCell];

    emitterCeFly.contents = (id)[UIImage imageNamed:@"tspark.png"].CGImage;

    emitterCeFly.emissionLongitude = (4*M_PI)/2;

    emitterCeFly.scale = 0.4;

    emitterCeFly.velocity = 100;

    emitterCeFly.birthRate = 45;

    emitterCeFly.lifetime = 1.5;

    emitterCeFly.yAcceleration = 350;

    emitterCeFly.emissionRange = M_PI/7;

    emitterCeFly.alphaSpeed = -0.7;

    emitterCeFly.scaleSpeed = -0.1;

    emitterCeFly.scaleRange = 0.1;

    emitterCeFly.beginTime = 0.01;

    emitterCeFly.duration = 0.7;

    

    //设置爆炸

    CAEmitterCell *emitterCeFirework = [CAEmitterCell emitterCell];

    emitterCeFirework.contents = (id)[UIImage imageNamed:@"tspark.png"].CGImage;

    emitterCeFirework.birthRate = 9999;

    emitterCeFirework.scale = 0.6;

    emitterCeFirework.velocity = 130;

    emitterCeFirework.lifetime = 2;

    emitterCeFirework.alphaSpeed = -0.2;

    emitterCeFirework.yAcceleration = 80;

    emitterCeFirework.beginTime = 1.5;

    emitterCeFirework.duration = 0.1;

    emitterCeFirework.emissionRange = 2*M_PI;

    emitterCeFirework.scaleSpeed = -0.1;

    emitterCeFirework.spin = 2;

    //设置爆炸动画名称

    [emitterCeFirework setName:@"firework"];

    

    //添加重复过程

    CAEmitterCell *emitterCePreSpark = [CAEmitterCell emitterCell];

    emitterCePreSpark.birthRate = 80;

    emitterCePreSpark.velocity = emitterCeFirework.velocity*0.7;

    emitterCePreSpark.lifetime = 1.7;

    emitterCePreSpark.yAcceleration = emitterCeFirework.yAcceleration*0.85;

    emitterCePreSpark.beginTime = emitterCeFirework.beginTime-0.2;

    emitterCePreSpark.emissionRange = emitterCeFirework.emissionRange;

    emitterCePreSpark.greenSpeed = 100;

    emitterCePreSpark.blueSpeed = 100;

    emitterCePreSpark.redSpeed = 100;

    //设置重复动画名称

    [emitterCePreSpark setName:@"preSpark"];

    

    //烟花最后的闪光

    CAEmitterCell *emitterCeSparkle = [CAEmitterCell emitterCell];

    emitterCeSparkle.contents = (id)[UIImage imageNamed:@"tspark.png"].CGImage;

    emitterCeSparkle.lifetime = 0.05;

    emitterCeSparkle.yAcceleration = 250;

    emitterCeSparkle.beginTime = 0.8;

    emitterCeSparkle.scale = 0.4;

    emitterCeSparkle.birthRate = 10;

    

    emitterCePreSpark.emitterCells = [NSArray arrayWithObjects:emitterCeSparkle, nil];

    emitterCeRocket.emitterCells = [NSArray arrayWithObjects:emitterCeFly,emitterCeFirework,emitterCePreSpark, nil];

    emitterLa.emitterCells = [NSArray arrayWithObjects:emitterCeRocket, nil];

    

    [self.view.layer addSublayer:emitterLa];

Swift的代码样式:

self.view.backgroundColor = UIColor.blackColor();

        

        //加载颗粒状的火花图片

        let emitterLa = CAEmitterLayer();

        emitterLa.emitterPosition = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height*0.75);

        emitterLa.renderMode = kCAEmitterLayerAdditive;

        

        //爆炸前逐渐隐藏发射颗粒

        let emitterCeRocket = CAEmitterCell();

        emitterCeRocket.emissionLongitude = CGFloat(-M_PI_2);

        emitterCeRocket.emissionLatitude = 0;

        emitterCeRocket.lifetime = 1.6;

        emitterCeRocket.birthRate = 1;

        emitterCeRocket.velocity = 400;

        emitterCeRocket.velocityRange = 100;

        emitterCeRocket.yAcceleration = 250;

        emitterCeRocket.emissionRange = CGFloat(M_PI/4);

        emitterCeRocket.color = CGColorCreateCopy(UIColor(red: 0.5, green:0.5, blue:0.5, alpha:0.5).CGColor);

        emitterCeRocket.redRange = 0.5;

        emitterCeRocket.greenRange = 0.5;

        emitterCeRocket.blueRange = 0.5;

        //设置动画效果的路径名称

        emitterCeRocket.name = "rocket";

        

        //添加路径状态

        let emitterCeFly = CAEmitterCell();

        emitterCeFly.contents = UIImage(named: "tspark.png")!.CGImage;

        emitterCeFly.emissionLongitude = CGFloat((4*M_PI)/2);

        emitterCeFly.scale = 0.4;

        emitterCeFly.velocity = 100;

        emitterCeFly.birthRate = 45;

        emitterCeFly.lifetime = 1.5;

        emitterCeFly.yAcceleration = 350;

        emitterCeFly.emissionRange = CGFloat(M_PI/7);

        emitterCeFly.alphaSpeed = -0.7;

        emitterCeFly.scaleSpeed = -0.1;

        emitterCeFly.scaleRange = 0.1;

        emitterCeFly.beginTime = 0.01;

        emitterCeFly.duration = 0.7;

        

        //设置爆炸

        let emitterCeFirework = CAEmitterCell();

        emitterCeFirework.contents = UIImage(named: "tspark.png")!.CGImage;

        emitterCeFirework.birthRate = 9999;

        emitterCeFirework.scale = 0.6;

        emitterCeFirework.velocity = 130;

        emitterCeFirework.lifetime = 2;

        emitterCeFirework.alphaSpeed = -0.2;

        emitterCeFirework.yAcceleration = 80;

        emitterCeFirework.beginTime = 1.5;

        emitterCeFirework.duration = 0.1;

        emitterCeFirework.emissionRange = CGFloat(2*M_PI);

        emitterCeFirework.scaleSpeed = -0.1;

        emitterCeFirework.spin = 2;

        //设置爆炸动画名称

        emitterCeFirework.name = "firework";

        

        //添加重复过程

        let emitterCePreSpark = CAEmitterCell();

        emitterCePreSpark.birthRate = 80;

        emitterCePreSpark.velocity = emitterCeFirework.velocity*0.7;

        emitterCePreSpark.lifetime = 1.7;

        emitterCePreSpark.yAcceleration = emitterCeFirework.yAcceleration*0.85;

        emitterCePreSpark.beginTime = emitterCeFirework.beginTime-0.2;

        emitterCePreSpark.emissionRange = emitterCeFirework.emissionRange;

        emitterCePreSpark.greenSpeed = 100;

        emitterCePreSpark.blueSpeed = 100;

        emitterCePreSpark.redSpeed = 100;

        //设置重复动画名称

        emitterCePreSpark.name = "preSpark";

        

        //烟花最后的闪光

        let emitterCeSparkle = CAEmitterCell();

        emitterCeSparkle.contents = UIImage(named: "tspark.png")!.CGImage;

        emitterCeSparkle.lifetime = 0.05;

        emitterCeSparkle.yAcceleration = 250;

        emitterCeSparkle.beginTime = 0.8;

        emitterCeSparkle.scale = 0.4;

        emitterCeSparkle.birthRate = 10;

        

        emitterCePreSpark.emitterCells = NSArray.init(objects:emitterCeSparkle) as? [CAEmitterCell];

        emitterCeRocket.emitterCells = NSArray.init(objects:emitterCeFly,emitterCeFirework,emitterCePreSpark) as? [CAEmitterCell];

        emitterLa.emitterCells = NSArray.init(objects: emitterCeRocket) as? [CAEmitterCell];

        

        self.view.layer.addSublayer(emitterLa);

源码下载:http://download.csdn.net/detail/hbblzjy/9584992

效果图:

                 

使用OC和Swift两种语言写一个发射烟花的小项目的更多相关文章

  1. 【Swfit】Swift与OC两种语法写单例的区别

    Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 + (instancetype)sharedNetworkTools { static id inst ...

  2. 一个label两种颜色,一个label两种字体

    -(void)addLabel{ UILabel *label = [[UILabel alloc]init]; label.backgroundColor = [UIColor grayColor] ...

  3. 用C语言写一个“事件”的模拟程序

    源:用C语言写一个“事件”的模拟程序 Example.c //定义一个函数指针 func int (*func) (void); //调用该函数相当于触发了事件. //该事件触发后,会检查函数指针fu ...

  4. 用 C# 写一个 Redis 数据同步小工具

    用 C# 写一个 Redis 数据同步小工具 Intro 为了实现 redis 的数据迁移而写的一个小工具,将一个实例中的 redis 数据同步到另外一个实例中.(原本打算找一个已有的工具去做,找了一 ...

  5. 两种语言实现设计模式(C++和Java)(一:工厂模式)

    本篇开始记录实现设计模式在工作中的两种常见语言上的实现. 本篇介绍最简单的工厂模式. 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品:在工厂中加工产品,使用产 ...

  6. 两种语言实现设计模式(C++和Java)(三:策略模式)

    策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异.用策略模式 ...

  7. JavaScript两种方法来定义一个函数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 可采用两种方法得到一个EJB对象

    (本文是转载其他人的技术文章,觉得说得挺浅显易懂,特借来学习)     在前面学习的例子中,只有一个EJB,但是对于一个真实的项目,EJB的数量可以有很多,而且EJB之间也会互相调用,那么在一个EJB ...

  9. 网络编程—【自己动手】用C语言写一个基于服务器和客户端(TCP)!

    如果想要自己写一个服务器和客户端,我们需要掌握一定的网络编程技术,个人认为,网络编程中最关键的就是这个东西--socket(套接字). socket(套接字):简单来讲,socket就是用于描述IP地 ...

随机推荐

  1. geotrellis使用(四十)优雅的处理请求超过最大层级数据

    前言 要说清楚这个题目对我来说可能都不是一件简单的事情,我简单尝试. 研究 GIS 的人应该都清楚在 GIS 中最常用的技术是瓦片技术,无论是传统的栅格瓦片还是比较新颖的矢量瓦片,一旦将数据切好瓦片就 ...

  2. Android 性能优化(一)内存篇

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/54377370 本文出自:[余志强的博客] 本博客同时也发布在 Hoo ...

  3. ubuntu初始化python3+postgresql+uwsgi+nginx+django

    一. postgresql 数据库 安装 apt-get update apt-get install postgresql 进入psql客户端 sudo -u postgres psql 创建数据库 ...

  4. Linux 性能监测:CPU

    CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中 ...

  5. springMVC源码分析--异常处理机制HandlerExceptionResolver简单示例(一)

    springMVC对Controller执行过程中出现的异常提供了统一的处理机制,其实这种处理机制也简单,只要抛出的异常在DispatcherServlet中都会进行捕获,这样就可以统一的对异常进行处 ...

  6. Spring3+Hibernate4连接Oracle11g数据库参数配置

    应用场合:使用SSH框架开发一套应用系统,因为不同的SSH版本+系统架构会导致各种的错误,总结测试了下,成功测试得出本文配置 软件版本:Sping3+Hibernate4+Maven3 主要配置文件内 ...

  7. RxJava操作符(03-变换操作)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51649975 本文出自:[openXu的博客] 目录: Buffer FlatMap fla ...

  8. 全文检索 Lucene(3)

    看完前两篇博客之后,想必大家对于Lucene的使用都有了一个比较清晰的认识了.如果对Lucene的知识点还是有点模糊的话,个人建议还是先看看这两篇文章. 全文检索 Lucene(1) 全文检索 Luc ...

  9. 2.7、Android Studio使用翻译编辑器本地化UI

    如果你的应用支持多语言,你需要合理的管理你的翻译的string资源.Android Studio 提供了翻译编辑器来使查看和管理翻译的资源更加容易. 关于翻译编辑器 翻译后的资源在你的项目里保存在不同 ...

  10. Cocos2D瓦块地图高清屏(retina)显示比例问题的解决

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在Cocos2D的游戏编程里,常用到瓦块地图.而cocos2D ...