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很有趣,想搞点事情,这几天终于忍不住了,于是他来了. 先看效果 这里我做了四个大家有兴趣可以看完文章, ...
随机推荐
- CentOS下mysql数据库常用命令总结
mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...
- 深入理解javascript的getTime方法
1.理解getTime getTime() 方法返回一个时间的格林威治时间数值. 可以使用这个方法把一个日期时间赋值给另一个Date 对象. 语法: dateObj.getTime() 参数: 无. ...
- BPM助力企业数字化转型
自九十年代末,流程管理开始引入国内,至今已经有20多年的历史了,由最初的部门级应用向企业级应用转变,大家的认知也经历了一系列的发展变化.不同阶段的信息化水平对企业的流程以及BPM平台也提出了不同的需求 ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- ERROR 1300 (HY000): Invalid utf8 character string: ''
在load csv 进mysql的时候,报这个错,苦恼了很长时间,网上搜索不到答案. mysql> load data infile '/home/hdh/8_sr/8_45.csv' ...
- Chrome代码下载及编译
2-3年前在做客户端开发时,看过CHROME的一部分代码,主要是BASE库相关的.其项目之大,编译时间之长给我留下了深刻的印象. 3年后的最近,想着再读一下其他部分的代码,所以就对其纠结的下载和编译过 ...
- Goodbye2014,Hello2015
正如我在研发会议上说的,总结是为了更好的计划:而计划,则是让你做事有目标,有方向:有了目标和方向,你才能真正把事情做成! 总的来说2014年可以归纳为下图: 2014年总结 一年的活动,基本可以归纳为 ...
- handlebars自定义helper的写法
handlebars相对来讲算一个轻量级.高性能的模板引擎,因其简单.直观.不污染HTML的特性,我个人特别喜欢.另一方面,handlebars作为一个logicless的模板,不支持特别复杂的表达式 ...
- 页面元素坐标和偏移(clientX/pageX/screenX/layerX/offsetWidth/scrollWidth/clientWidth等)相关整理
鼠标事件都是在特定位置发生的,我们可以通过event事件对象的各种属性来获得事件发生的坐标位置,有相对于视口的,有相对于整个文档的,同样页面元素的位置也有相对视口的,也有滚动后的,这些都比较容易混淆, ...
- ABP(现代ASP.NET样板开发框架)系列之6、ABP依赖注入
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之6.ABP依赖注入 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...