cocos2d学习笔记第四章 粒子效果及座标系
请先保证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 函数用来获得经过缩放和旋转之后的外框盒大小。
补充:移动开发 , 其他 ,