Cocos2D-Android- 基础

来源:互联网 发布:淘宝店没有发布宝贝 编辑:程序博客网 时间:2024/06/06 08:15

Cocos2D-Android- 基础

cocos2d简介

cocos2d是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。可以让你在创建自己的多平台游戏时节省很多的时间。
cocos2d最初使用phony和Objective-c编写的。
Cocos2D也拥有几个主要版本,包括Cocos2D-iPhone、Cocos2D-X,以及被社区普遍看好的Cocos2D-HTML5和JavaScript bindings for Cocos2D-X。
同时也拥有了非常优秀的编辑器(独立编辑器),例如SpriteSheet Editors、Particle Editors (粒子系统)、Font Editors 、 Tilemap Editors(编辑游戏地图)。
cocos2d基于MIT协议的免费开源框架,用户可以放心使用,不用担心商业授权的问题。
截至2013年12月10日数据更新,国内已有47款月收入超千万手游,其中32款基于Cocos2d-x开发。

  • cocos2d架构

博文: http://blog.csdn.net/jjiss318/article/details/8798516

  • 使用cocos2d在android下开发游戏

    • 引入cocos2d-android.jar
    • 将fps_images.png图片放在assets目录下
    • cocos2d下的时间单位是秒
  • cocos2d中的坐标系

    • cocos2d中的坐标系与android中的坐标系并不同。
    • cocos2d中的坐标系是标准的数学坐标系,即左下角为原点
    • cocos2d中有锚点的概念
      • 锚点: 以一个CCSprite为例,在设置它的位置时,即把其锚点放在那个位置上
      • 默认的锚点为元素的中心(0.5, 0.5)
      • 设置锚点的API: setAnchorPoint(0,0); //设置在原点(右下角), 最大锚点坐标为: (1, 1) -> 左上
  • 使用cocos2d开发时图片的放置位置

    • 在平时的android开发中,我们一般都把图片放在values/drawable-xx目录下,
    • 但是,当使用cocos2d开发时, 图片应放在assets目录下

相关API

  • 图形引擎

    • 可以把游戏开发想成在拍一部电影
    • 图形引擎主要包括下面API
  • CCDirector

    • 导演采用的是单例设计模式
    • 导演的生命周期一般要与Activity相绑定
    • 主要作用
      • 控制场景的切换(运行场景)
      • 控制开始和暂停(线程的开启)
    //基本功能介绍    CCDirector director = CCDirector.sharedDirector();  //获得导演    director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);   //设置游戏方向水平(当然也可以在清单文件中,将应用的横竖屏写死)    director.setDisplayFPS(true);    //是否展示帧率(开发中)    director.setAnimationInterval(1.0f/30);   //锁定帧率:指定一个帧率 (当然只能向下锁定)     director.setScreenSize(480, 320);    //设置屏幕的大小(可以自动屏幕适配)    CGSize winSize = CCDirector.sharedDirector().getWinSize();  (获取屏幕的大小)    //必须做的步骤    //1. 获取CCGLSurfaceView, 开启线程    CCGLSurfaceView surfaceView=new CCGLSurfaceView(this); //这个位置必须传递Activity     director.attachInView(surfaceView);   //开启线程    //2. 运行场景    director.runWithScene(ccScene);//  运行场景    //3. 与activity的生命周期绑定    @Override    protected void onResume() {        super.onResume();        director.resume();    }    @Override    protected void onPause() {        super.onPause();        director.onPause();        //director.pause();    }    @Override    protected void onDestroy() {        super.onDestroy();        director.end();// 游戏结束了    }
  • CCScene(场景)
    • 本身被添加在导演上,可以往他身上添加图层。
    • 目前该类没有什么具体的功能,它只是作为一个项目中需要展示内容的根节点存在
    • 但是,它有许多子类, 这些子类有一个功能就是:在场景切换时,会有动画效果
    • 一般我们在为了在图层切换时,会有动画效果,一般会选择一个CCScene的子类
      • CCTransitionFlipX (x轴左翻)
      • CCTransitionShrinkGrow(交错换)
      • CCTransitionSlideInL(场景从左移入推出原场景)

    //1.被导演运行    director.runWithScene(ccScene);//  运行场景    //2.为使图层在切换时会有动画效果, 可以通过切换场景来实现    CCScene scene = CCScene.node();  //获取场景    scene.addChild(newLayer);//你要切换的新图层    CCFlipXTransition transition = CCFlipXTransition.transition(2, scene, 0);  //可以看出,其实就是对场景进行了包装    CCDirector.sharedDirector().replaceScene(transition);//切换场景 ,参数 新的场景    //3.向场景上添加图层    scene.addChild(new WelcomeLayer());


  • CCLayer(图层)

  • 可以在它的上面添加精灵: addChild();
  • 一般在开发时,都是写一个图层类,在上面处理我们游戏中的精灵等元素的关系
  • cocos2d规定,多个图层存在时,只能有一个图层来处理触摸事件: setIsTouchEnabled(true);// 打开触摸事件
  • 可以在图层上处理触摸事件(即覆写下列方法)
    • 图层要想处理触摸事件,必须打开触摸事件的开关:
    • ccTouchesBegan(MotionEvent event) //按下
    • ccTouchesMoved(MotionEvent event)
    • ccTouchesEnded(MotionEvent event)
    • ccTouchesCancelled(MotionEvent event)
    • 在cocos2d中进行游戏开发时,触摸事件能晚开就晚开
  • 对于触摸事件的处理, 由于cocos2d坐标系与android坐标系不同的原因,应先进行坐标转换
    //在ccTouchesBegan 中进行坐标转换    @Override    public boolean ccTouchesBegan(MotionEvent event) {        // 把android坐标系中点的点 转换成cocos2d坐标系中的点        CGPoint point = this.convertTouchToNodeSpace(event);        return super.ccTouchesBegan(event);    }


  • CCSprite(精灵)

  • 即我们游戏开发中的最小单位,一般被添加在图层上。
  • 下面来看看与其相关的API

    //加载一个精灵,在初始化时设置好其相关的图片    CCSprite ccSprite = CCSprite.sprite("sprite.jpg");    ccSprite.setAnchorPoint(0,0);// 设置锚点    ccSprite.setPosition(100, 100);//设置坐标    ccSprite.setVisible(true);// 设置不可显示    ccSprite.setOpacity(0);//设置不透明度 值越大 越不透明  0-255    //镜子效果    ccSprite.setFlipY(true);// X水平翻转,Y垂直翻转     //在图层上添加精灵    this.addChild(ccSprite);  //this代表当前图层对象    //  this.addChild(ccSprite, z);  // z代表显示优先级, 越大越高, (默认是谁后添加谁在上面)     //this.addChild(ccSprite, 1, 10);//  参数3 标签(类似Id,使我们可以在图层上利用标签找到它)    /this.getChildByTag(10); 根据Tag标签 找对应的孩子


  • CCNode

  • 它是CCSprite, CCScene, CCLayer的爹!!!!
  • 它抽取类其孩子的一些公共方法,例如
    • setAnchorPoint()
    • removeSelf()
    • +ccp(); 构造一个点
    • addChild();
    • CGRect getBoundingBox(); 获得其所占的矩形
0 0
原创粉丝点击