cocos2d学习笔记第四章 粒子效果及座标系
2012-11-28 11:24
211 查看
请先保证fire.png文件在工程中存在, 因为cocos2D的粒子系统需要使用,否则颜色无变化,只会显示黑方框.
1. 使用自带的粒子效果来实现指弹打中敌人后的喷血效果
CCParticleSystem *system;
system = [CCParticleExplosion node]; //爆炸效果 (还有很多其它效果)
//让效果显示在当前被打中的精灵身上
system.position = CGPointMake(self.contentSize.width/2, self.contentSize.height/2);
system.lift = 0.2; //粒子的生命周期是0.2秒 就让他消失。
system.lifeVar = 0; //粒子生命周期的变化度,将随机与上值加减得到生命周期,这里不让他变化,所以为0.
system.startSize = 5; //原始创建时的粒子大小
system.startSizeVar = 0; //变化度仍然为0
system.endSize = 1; //粒子生命结束时的大小
system.endSizeVar = 0; //变化度仍然为0
ccColor4F c = {1.0, 0, 0, 1}; //定义粒子颜色为红色不透明
system.startColor = c; // 粒子起始颜色为红色
system.startColorVar = c;
system.endColor = c; // 粒子结束颜色为红色
system.endColorVar = c;
system.autoRemoveOnFinish = YES: //动画效果执行完后将自动从父结点移除
[self addChild:system z:1 tag:1]; //添加为子节点后动画自己播放,完毕后自动移除,不需用做管理了。
system.autoRemoveOnFinish = YES: //动画效果执行完后将自动从父结点移除
[self addChild:system z:1 tag:1]; //添加为子节点后动画自己播放,完毕后自动移除,不需用做管理了。
编译运行即可看到效果.
2.用资源文件来实现粒子效果
下载ParticleDesigner工具 -> 打开后点上面的Randomie来看一下别人做的一些效果, 找一个相近的来修改相应的参数就可以, 合适后保存为monsterOver1.plist文件。
将monsterOver1.plist文件加到工程中后,我这个文件是用来显示敌人被打死后的爆炸效果。
CCParticleSystem *system;
system = [CCParticleSystemQuad particleWithFile:@"monsterOver1.plist"];
CGPoint location = CGPointMake(self.contentSize.width/2, self.contentSize.height/2); //该座标为本地座标 下面会有详解
location = [self convertToWorldSpace:location]; //将其转为世界座标系
location = [self.parent.parent convertToNodeSpace:location]; //因为爆炸效果显示在场景层,所以再将世界座标转为场景中的座标位置
system.position = location;
system.autoRemoveOnFinish = YES: //动画效果执行完后将自动从父结点移除
[self addChild:system z:1 tag:1]; //添加为子节点后动画自己播放,完毕后自动移除,不需用做管理了。
编译运行即可看到效果.
3. 关于cocos2d中的座标系用法及转换方法 (摘转自:pengyingh的cnblogs)
(1) 屏幕坐标系 原点在左上角,X轴向右,Y轴向下。
(2) GL坐标系 原点在左下角,X轴向右,Y轴向上。
(3) 世界坐标系 指相对于整个屏幕的坐标系,(0,0)就是屏幕的左下角,(320,480)就是屏幕的右上角。
(4) 本地坐标系 相对于父对象的坐标。
从Node拿到的位置是该节点的本地坐标,需要通过特定的函数才能把本地坐标转换为世界坐标。而且这里的坐标都用的是GL坐标系。在CCNode对象中有几个方便的函数可以做坐标转换。convertToWorldSpace方法可以把基于当前node的本地坐标系下的坐标转换到世界坐标系中。convertToNodeSpace方法可以把世界坐标转换到当前node的本地坐标系中。
另一个关键的问题就是在cocos2d里面就是各种对象的大小问题。因为在cocos2d里CCNode对象有缩放的方法setScaleX和setScaleY。所以在获取对象大小的时候就必须根据情况明确指定获取对象原始大小,还是缩放后的大小。当然cocos2d里提供了对应的函数来完成这些操作。
getContentSize 函数用来获得节点原始的大小。
boundingBox 函数用来获得经过缩放和旋转之后的外框盒大小。
1. 使用自带的粒子效果来实现指弹打中敌人后的喷血效果
CCParticleSystem *system;
system = [CCParticleExplosion node]; //爆炸效果 (还有很多其它效果)
//让效果显示在当前被打中的精灵身上
system.position = CGPointMake(self.contentSize.width/2, self.contentSize.height/2);
system.lift = 0.2; //粒子的生命周期是0.2秒 就让他消失。
system.lifeVar = 0; //粒子生命周期的变化度,将随机与上值加减得到生命周期,这里不让他变化,所以为0.
system.startSize = 5; //原始创建时的粒子大小
system.startSizeVar = 0; //变化度仍然为0
system.endSize = 1; //粒子生命结束时的大小
system.endSizeVar = 0; //变化度仍然为0
ccColor4F c = {1.0, 0, 0, 1}; //定义粒子颜色为红色不透明
system.startColor = c; // 粒子起始颜色为红色
system.startColorVar = c;
system.endColor = c; // 粒子结束颜色为红色
system.endColorVar = c;
system.autoRemoveOnFinish = YES: //动画效果执行完后将自动从父结点移除
[self addChild:system z:1 tag:1]; //添加为子节点后动画自己播放,完毕后自动移除,不需用做管理了。
system.autoRemoveOnFinish = YES: //动画效果执行完后将自动从父结点移除
[self addChild:system z:1 tag:1]; //添加为子节点后动画自己播放,完毕后自动移除,不需用做管理了。
编译运行即可看到效果.
2.用资源文件来实现粒子效果
下载ParticleDesigner工具 -> 打开后点上面的Randomie来看一下别人做的一些效果, 找一个相近的来修改相应的参数就可以, 合适后保存为monsterOver1.plist文件。
将monsterOver1.plist文件加到工程中后,我这个文件是用来显示敌人被打死后的爆炸效果。
CCParticleSystem *system;
system = [CCParticleSystemQuad particleWithFile:@"monsterOver1.plist"];
CGPoint location = CGPointMake(self.contentSize.width/2, self.contentSize.height/2); //该座标为本地座标 下面会有详解
location = [self convertToWorldSpace:location]; //将其转为世界座标系
location = [self.parent.parent convertToNodeSpace:location]; //因为爆炸效果显示在场景层,所以再将世界座标转为场景中的座标位置
system.position = location;
system.autoRemoveOnFinish = YES: //动画效果执行完后将自动从父结点移除
[self addChild:system z:1 tag:1]; //添加为子节点后动画自己播放,完毕后自动移除,不需用做管理了。
编译运行即可看到效果.
3. 关于cocos2d中的座标系用法及转换方法 (摘转自:pengyingh的cnblogs)
(1) 屏幕坐标系 原点在左上角,X轴向右,Y轴向下。
(2) GL坐标系 原点在左下角,X轴向右,Y轴向上。
(3) 世界坐标系 指相对于整个屏幕的坐标系,(0,0)就是屏幕的左下角,(320,480)就是屏幕的右上角。
(4) 本地坐标系 相对于父对象的坐标。
从Node拿到的位置是该节点的本地坐标,需要通过特定的函数才能把本地坐标转换为世界坐标。而且这里的坐标都用的是GL坐标系。在CCNode对象中有几个方便的函数可以做坐标转换。convertToWorldSpace方法可以把基于当前node的本地坐标系下的坐标转换到世界坐标系中。convertToNodeSpace方法可以把世界坐标转换到当前node的本地坐标系中。
另一个关键的问题就是在cocos2d里面就是各种对象的大小问题。因为在cocos2d里CCNode对象有缩放的方法setScaleX和setScaleY。所以在获取对象大小的时候就必须根据情况明确指定获取对象原始大小,还是缩放后的大小。当然cocos2d里提供了对应的函数来完成这些操作。
getContentSize 函数用来获得节点原始的大小。
boundingBox 函数用来获得经过缩放和旋转之后的外框盒大小。
相关文章推荐
- cocos2d-x 3.1.1 学习笔记[16] Particle 粒子效果
- cocos2d-x-3.0rc1 学习笔记2( 什么标题、菜单按钮、粒子效果之类的)
- IOS cocos2d学习笔记-<六>CCParticalSystem粒子效果
- cocos2d-x学习笔记之粒子效果
- cocos2d-x学习笔记(12)--粒子系统
- android: qq 5.0 demo学习笔记(主 粒子爆炸效果+ViewDragHelper)
- iOS学习笔记-085.粒子效果——QQ拖动效果
- 【吼吼睡cocos2d学习笔记】第四章 - 第一个游戏
- <转>cocos2d-x学习笔记(五)仿真树叶飘落效果的实现(精灵旋转、翻转、钟摆运动等综合运用)
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第0步---知识点总结&效果预览&设计思路
- iOS学习笔记-084.粒子效果——路径移动
- Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)
- 我的Cocos2d-x学习笔记(二十一)内置粒子系统、使用粒子特效文件
- cocos2d-x 菜鸟学习笔记十二(粒子系统的研究初接触)
- cocos2d 粒子效果以及Particle Designer粒子工具的学习
- 【Cocos2d-html5游戏引擎学习笔记(11)】运动中速度效果
- cocos2D-x 3.x学习笔记【5】 缓动效果
- Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)
- cocos2d-x-3.0学习笔记之使用listView实现滚屏效果
- cocos2d-x学习笔记(五)仿真树叶飘落效果的实现(精灵旋转、翻转、钟摆运动等综合运用)