Cocos2D-Android- 地图,粒子系统与声音引擎

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文件
      • 在程序中加载这个文件即可
  • 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(); //图层继续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值