Objective-c粒子动画
本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址
https://www.baiydu.com
前面贴过几篇关于SpriteKit的案例文章,其中涉及到的动画都是材质类的图片切换或则常规的动画效果,没涉及到今天要说的粒子动画,今天说的粒子动画就是在游戏中实现更佳炫酷的效果必须使用的类,OC中粒子动画主要涉及到两个类,CAEmitterLayer,CAEmitterCell,第一个是动画的执行类,第二个是动画的实现类,虽只有两个类,属性也不多,但是想要理解这两个类,并且灵活运用它们还是有一定难度的。应为粒子动画在游戏开发中算是最难的技术了,当前比较火的游戏开发框架,大多粒子动画效果都是用工具制作,比如3dmax这样的工具,虽然oc把实现粒子动画的类优化得很容易很简单,但是难度还是有的,不好理解。我接下去的步骤就是先解释下这两个类,然后会贴上一个对每句代码都详细解释过的案例。
一、涉及类
1、CAEmitterLayer(粒子动画执行类,这里你把它想成是实现粒子动画的导演类)
/* The array of emitter cells attached to the layer. Each object must
* have the CAEmitterCell class. */
这个数组是这个层的附加发射器层, 每个对象必须至少有一个粒子类,
@property(nullable, copy) NSArray<CAEmitterCell *> *emitterCells;
2、CAEmitterCell(粒子类,这个类可以想成是粒子动画实现类,用它来实现粒子动画后,放入到CAEmitterLayer中去执行)
二、详细案例
- @interface SnowViewController ()
- @end
- @implementation SnowViewController
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- flakeLayer = [CAEmitterLayer layer];
- CGRect bounds = [[UIScreen mainScreen] bounds];
- //下面是设置发射器在屏幕上的位置,
- flakeLayer.emitterPosition = CGPointMake(bounds.size.width / , bounds.size.height/);
- /*下面是发射器的size,决定了粒子的出生位置范围。比如下面的设置为0,0那么所有的粒子出生轨迹起点都将是发射器的中心点,你可以想成是模拟器的中心点 可以把这个范围与emitterShape属性结合来想*/
- flakeLayer.emitterSize = CGSizeMake(,);
- // 发射模型决定出生粒子的运动轨迹显示的形状
- flakeLayer.emitterShape =kCAEmitterLayerLine;//kCAEmitterLayerRectangle
- //发射模式
- flakeLayer.emitterMode =kCAEmitterLayerSurface;// kCAEmitterLayerOutline
- //申明一个粒子类
- CAEmitterCell *flakeCell = [CAEmitterCell emitterCell];
- //是个CGImageRef的对象,既粒子要展现的图片
- flakeCell.contents = (id)[[UIImage imageNamed:@"FFFlake.png"] CGImage];
- //每秒出生的粒子数量
- flakeCell.birthRate = ;
- //生命周期 1.2秒之后消失
- flakeCell.lifetime = 120.0;
- //生命周期范围
- flakeCell.lifetimeRange = 0.5;
- //速度//粒子从出生到运动轨迹的终点速的速度,如果这里指设置很大那么屏幕的粒子就会增多,出生率就会加快
- flakeCell.velocity = ;
- //速度范围
- flakeCell.velocityRange = ;
- //粒子y方向的加速度分量--向 粒子y轴方向移动
- flakeCell.xAcceleration = ;
- // upx-y平面的发射方向 ....>> emissionLatitude:发射的z轴方向的角度
- flakeCell.emissionLongitude = -M_PI / ;
- // 发射器在一个范围内的随机发射角度,这里如果设置为0那么,发射器的角度就会固定,如果设置为圆周率,那么出生粒子的发射范围就会在360度范围内随机发射粒子角度
- flakeCell.emissionRange = M_PI ;
- //这里代表粒子出生后完成运动轨迹中带的效果,如果是0那么在生命周期内就会以平滑的形式移动,假如这里我们设置为
- //360那么 在生命周期内它就会旋转的形式移动
- flakeCell.spinRange =;
- flakeCell.scale = 1.0;//缩放比例:
- flakeCell.scaleSpeed = 0.1;//1.0;//缩放比例速度
- flakeCell.scaleRange = 1.0;//缩放比例范围;
- flakeCell.color = [[UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1.0] CGColor];//粒子的颜色
- flakeCell.redRange = 1.0;//一个粒子的颜色red 能改变的范围;
- flakeCell.redSpeed = 0.1;//粒子red在生命周期内的改变速度;
- flakeCell.blueRange = 1.0;//一个粒子的颜色blue 能改变的范围
- flakeCell.blueSpeed = 0.1;//粒子blue在生命周期内的改变速度
- flakeCell.greenRange = 1.0;//个粒子的颜色green 能改变的范围;
- flakeCell.greenSpeed = 0.1;//粒子green在生命周期内的改变速度;
- flakeCell.alphaSpeed = -0.08;//粒子透明度在生命周期内的改变速度
- flakeLayer.emitterCells = [NSArray arrayWithObject:flakeCell];//粒子发射的粒子
- [self.view.layer insertSublayer:flakeLayer atIndex:];
- }
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。
Objective-c粒子动画的更多相关文章
- 7款让人惊叹的HTML5粒子动画特效(转载)
1.HTML5 Canvas粒子模拟效果 这是一款利用HTML5 Canvas模拟出来的30000个粒子动画,当你用鼠标在canvas画布上移动时,鼠标周围的一些粒子就会跟着你移动,并形成一定的图案, ...
- canvas学习之粒子动画
项目地址:http://pan.baidu.com/s/1ccTptc 粒子动画意思就是把一个图片粒子画,然后使用粒子作出动画效果,主要两个问题:一个图片如何粒子化,这里面我们使用canvas的get ...
- 7款让人惊叹的HTML5粒子动画特效
HTML5的很大一个优势就是可以更加便捷高效地制作网页粒子动画特效,特别是Canvas特性,可以实现在网页上绘制任何图形和动画.本文要分享7款让人惊叹的HTML5粒子动画特效,这些粒子特效都提供源代码 ...
- WPF特效-粒子动画
原文:WPF特效-粒子动画 WPF实现泡泡龙小游戏效果. /// -Ball to Ball Collision - Detection and Handling /// http:// ...
- 带着canvas去流浪系列之九 粒子动画【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- 带着canvas去流浪系列之九 粒子动画
[摘要] canvas实现粒子动画 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 粒子特效 粒子特效一般指密集点阵效果,它并不是canvas独有 ...
- 【带着canvas去流浪(9)】粒子动画
目录 一. 粒子特效 二. 开发中遇到的问题 2.1 卡顿 2.2 轨迹 2.3 复位 2.4 防护层 2.5 二维向量类 三. 实现讲解 3.1 粒子类的update方法 3.2 粒子群的绘制 3. ...
- vue-particles粒子动画插件的使用和爬坑出现垂直滚动条
1下载==>cnpm install vue-particles --save-dev 2引入 注册-->main.js//插件 import VueParticles from 'vue ...
- js canvas 粒子动画 电子表
前言 从我接触canvas的第一天就觉得canvas很有趣,想搞点事情,这几天终于忍不住了,于是他来了. 先看效果 这里我做了四个大家有兴趣可以看完文章, ...
随机推荐
- 编写自己的PHP MVC框架笔记
1.MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). ...
- 【转】 FineBI:自助式BI工具打造业务分析的“快与准”
如今的企业经营方式,业务对于数据分析有极大的需求,但却苦于没有数据以及工具的有效支持,业务分析仍就依赖于IT报表制作.而IT方不断地按业务需求去调研.确认业务逻辑,然后取数做报表,其中还要忍受业务的需 ...
- grunt配置任务
这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...
- 技术笔记:Indy的TIdSMTP改造,解决发送Html和主题截断问题
使用Indy来发邮件坑不少啊,只不过有比没有好吧,使用delphi6这种老工具没办法,只能使用了新一点的Indy版本9,公司限制... 1.邮件包含TIdText和TIdAttachment时会出现T ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置
0x00 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到“类型”,话题的热度就会立马升温,因为很多似是而非.或者片面的概念常常被人们当做是全面和正确的答案.加之最近在园子看到有人翻译的& ...
- How ASP.NET Web API 2.0 Works?[持续更新中…]
一.概述 RESTful Web API [Web标准篇]RESTful Web API [设计篇] 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 二.路由 ...
- 背后的故事之 - 快乐的Lambda表达式(二)
快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...
- ABP(现代ASP.NET样板开发框架)系列之3、ABP分层架构
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- Entity Framework 6 Recipes 2nd Edition(13-5)译 -> 使POCO的修改追踪更高
问题 你正在使用POCO,你想提高修改跟踪的性能,同时使内存消耗更少.另外,你想通过EF的CodeFirst方式来实现. 解决方案 假设你有一个关于Account(帐户)和相关的Payments(支付 ...