Cocos2D-Android- 地图,粒子系统与声音引擎
地图的制作与解析
- 前面已经有讲到,Cocos2d有自己的地图编辑器: Tilemap Editors
- 当地图编辑完成后,将xx.tmx和地图对应的图片应拷贝到 assets目录下
- xx.tmx中对应的图片路径,应设置正确
- 地图的默认锚点为(0,0)
- xx.tmx文件实际上就是一个XML文件,因此我们在程序中可以使用CCTMXObjectGroup对其进行解析
- 下面是一个 .tmx文件的范例
<!- map.tmx文件-->
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" width="14" height="6" tilewidth="46" tileheight="53">
<tileset firstgid="1" name="bk1" tilewidth="46" tileheight="53">
<image source="bk1.jpg" width="678" height="320"/> <!- 图片的路径不能写错-->
</tileset>
<layer name="block" width="14" height="6">
<data encoding="base64" compression="zlib">
eJyTZ2BgkCcDWyBhbGLoctj0Y2Mj83HZQYw+fO4lRR+pYQAAbfQM0A==
</data>
</layer>
<objectgroup name="road" width="14" height="6"> <!-- 我们在地图中定义的我们需要的点的组合-->
<object x="20" y="76"/>
<object x="113" y="80"/>
<object x="112" y="242"/>
<object x="248" y="246"/>
<object x="261" y="76"/>
<object x="434" y="76"/>
<object x="437" y="285"/>
<object x="529" y="289"/>
<object x="533" y="134"/>
<object x="622" y="135"/>
</objectgroup>
</map>
- 下面来解析地图
//1. 首先加载地图
//CCTMXTiledMap, 在加载地图时会对地图进行解析,内部是使用SAX来进行解析的
CCTMXTiledMap map = CCTMXTiledMap.tiledMap("map.tmx");
map.setAnchorPoint(0.5f,0.5f); //修改地图的锚点, 这样地图才可以跟随手指移动
// 因为修改了锚点 ,所以坐标也是需要修改的
map.setPosition(map.getContentSize().width/2,map.getContentSize().height/2);
this.addChild(map); //把地图添加到图层上
//2.解析地图(解析出地图中我们需要的点)
roadPoits = new ArrayList<CGPoint>(); //弄个集合来保存我们要解析出来的点
CCTMXObjectGroup objectGroupNamed = map.objectGroupNamed("road"); //获取地图中的 <objectgroup />
//看上面的XML文件可以看出,objectgroup需要用这样的集合来表示
ArrayList<HashMap<String, String>> objects = objectGroupNamed.objects;
for (HashMap<String, String> hashMap : objects) {
int x = Integer.parseInt(hashMap.get("x"));
int y = Integer.parseInt(hashMap.get("y"));
CGPoint cgPoint = ccp(x, y);
roadPoits.add(cgPoint);
}
- 地图需要注意的地方
- 当引入地图之后,我们在摆放精灵时,是不是应该把精灵摆放在地图上了?
- 地图时可以跟随手指移动的(注意,运动的相对性!!)
- 但是地图的锚点必须在中间位置
//设置地图的移动, 在图层的ccTouchesMoved方法中处理
@Override
public boolean ccTouchesMoved(MotionEvent event) {
map.touchMove(event, map);// 地图会随着手指的移动而移动 如果该方法生效 必须保证地图的锚点在中间位置
return super.ccTouchesMoved(event);
}
粒子系统
什么是粒子系统
- 粒子系统表示三维计算机图形学中模拟一些特定的模糊现象的技术,而这些现象用其它传统的渲染技术难以实现的真实感的 game physics。
经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等 - 可以使用ParticleDesigner工具来制作粒子系统
- 效果导出成.plist文件
- 在程序中加载这个文件即可
- 粒子系统表示三维计算机图形学中模拟一些特定的模糊现象的技术,而这些现象用其它传统的渲染技术难以实现的真实感的 game physics。
cocos2d中的粒子系统
- 在cocos2d中粒子系统的基类是: CCParticleSystem
- 其下的一个重要的分支是:CCQuadParticleSystem,其下有我们一般会用到的各种粒子效果,比如
- CCParticleFire,CCParticleRain,CCParticleSnow
代码中使用粒子系统
private CCParticleSystem system = system = CCParticleSnow.node();
//设置雪花样式,可以加载我们自定义的图片
system.setTexture(CCTextureCache.sharedTextureCache().addImage(“f.png”));
this.addChild(system, 1); //将粒子系统加载到图层上
//加载粒子系统文件
CCParticleSystem ps=CCParticleSystemPoint.particleWithFile("f.plist");
ps.setPosition(0,winSize.height);
this.addChild(ps);
声音引擎
- Android中的声音引擎是非常不错
- cocos2d中的声音引擎其实就是对android中 Audio API的封装
例如:
SoundEngine engine=SoundEngine.sharedEngine();
// 1 上下文 2. 音乐资源的id 3 是否循环播放
engine.playSound(CCDirector.theApp, R.raw.psy, true);
游戏的暂停与继续
- 一般游戏暂停我们都是在当前图层上弹出一个新图层,来告诉用户游戏暂停
- 游戏暂停的原理是,图层暂停
- 我们需要做的就是封装暂停逻辑!
相关方法
CCLayer.onExit(); // 暂停
CCLayer.onEnter(); //图层继续