zoukankan      html  css  js  c++  java
  • cocos2Dx(2)——核心类备忘

    1. cocos2D引擎将游戏的各部分抽象成为几个重要概念:

    导演Director、场景Scene、布景层Layer、精灵Sprite.

    2. 节点类CCNode

    2.1 CCNode 继承自CCObject,任何需要画在屏幕上的对象都是节点类。包括场景类CCScene、布景层类CCLayer、精灵类CCSprite、菜单类CCMenu等。

    2.2 CCNode类不自带贴图,屏幕上是看不到节点类效果的。CCNode类使用场合一般包括:

    (1) CCNode运行的动作和设置的旋转角度等属性都可以传递给子节点,所以可以定义一个CCNode对象来管理一批子节点,这个CCNode对象本身是不显示的。

    (2)定义CCNode的子类作为屏幕上的显示对象。

    2.3 CCNode的子类需要:

    (1) 重写初始化方法init()和周期性回调方法。

    (2) 在时间线上控制回调。

    (3) 重写渲染绘制方法。

    3. 导演类CCDirector

    3.1 CCDirector类继承自CCObject,且有子类CCDisplayLinkDirector类,该类是一个可以自动刷新的导演类。

    3.2 CCDirector类是cocos2d-x引擎的核心,用来创建并控制主屏幕的显示,同时控制场景的显示时间和显示方式等。功能主要包括:

    (1) 初始化openGL会话。

    (2) 设置OpenGL的一些参数和方式。

    (3) 访问和改变场景以及访问cocos2d-x的配置细节

    (4) 访问视图。

    (5) 设置投影和朝向。

    3.3 CCDirector是单例模式,整个游戏通常只有一个导演。通常通过CCDirector::sharedDirector()->setDisplayStats(false);的方式来调用CCDirector的方法。

    4. 场景类CCScene

    4.1 CCScene继承字CCNode,CCScene拥有自己的锚点,默认值(0.5,05)。

    4.2 通常将屏幕上所有显示对象的父节点设置为一个场景,通过场景来管理这一批显示节点。

    4.3 CCScene有子类CCTransitionScene(切换场景类),CCTransitionScene类有很多子类,这些类都是用于场景切换的特效。

    4.4 新建场景:

    (1) 定义场景对象并给场景添加布景层等子节点。

    使用CCScene::create();方法新建场景实例;

    CCScene类继承字CCNode的方法addChild();给自己添加子节点。

    (2) 调用导演类方法获得并运行场景。

    调用CCDirector::sharedDirector()->runWithScene(pScene);方法运行场景。

    4.5 场景切换过程:

    (1) 调用CCDirector::sharedDirector()->purgeCachedData();清空缓存;

    (2) 新建新场景对象;

    (3) 调用CCDirector::sharedDirector()->replaceScene(this);替换新场景;

    4.6 场景切换特效

    游戏中的第一个场景,使用CCDirector::sharedDirector()->runWithScene(pScene)使用,若无过渡直接替换场景,使用CCDirector::sharedDirector()->replaceScene(pNewScene);切换到新场景。

    若需要使用场景间的切换效果,需使用相应的场景切换类,场景切换类都继承自CCTransitionScene,使用场景切换类的步骤:

    (1) 新建目标场景。

    (2) 使用特定效果的场景切换类的方法create创建特效场景,该方法的第一个参数是特效切换时间,传入一个CCTimer对象,方法的第二个参数是待进入新场景,即要切换到的目标场景,某些特效场景类需要提供第三个参数。

    (3)  调用CCDirector::sharedDirector()->replaceScene();将(2)中定义的切换场景类对象传入。

    注:有某些场景切换类需要做额外操作,如设置摄像机、检查OpenGL版本是否支持等。

    5. 布景层类CCLayer

    5.1 CCLayer是CCNode的子类,并且继承了CCTouchDelegate类、CCacceleromelerDelegate类、CCkeypadDelegate类。所以CCLayer是遵守触屏代理协议、加速传感器代理协议和键盘时间代理协议的节点类,通常用来作为场景中独立的层,布景层上可以放置文本、精灵、菜单等元素,通过层与层之间的组合关系形成游戏的界面UI。

    5.2 通常在CCLayer的init()方法中进行布景层的绘制、添加元素等操作,调用场景类的addChild();方法将布景层对象加入到所在场景。

    5.3 CCLayer的子类及其基本功能

    (1) 颜色布景层类CCLayerColor

    可以为布景层增添颜色、设置透明度。

    (2) 多层布景层类CCLayerMultiplex

    管理多层布景层,(多个页面但不需要场景切换)。

    (3) 菜单类CCMenu

    菜单项容器,装载各种菜单项。

    (4) 控件类CCControl及其子类

    实现各种控件,包括拖动滑块(CCControlSlider)、颜色选择盘(CCControlColourPicker)、开关按钮(CCControlSwitch)、按钮(CCControlButton)等。

    6. 精灵类CCSprite

    6.1 精灵是一张二维图片对象,可以用一张图片或一块矩形来定义。CCSprite继承自CCNode类,同时继承了CCTextureProtocal类和CCRGBAProtocal类。CCSprite类和它的子类对象都可以作为精灵批处理类CCSpriteBatchNode的处理对象。

    6.2 精灵批处理类CCSpriteBatchNode

    为将多个精灵只进行一次准备一次渲染和一次清理以避免频繁调用openGL函数而提出的,同时处理多个精灵对象的类。CCSpriteBatchNode继承自CCNode和CCTextureProtocol类。

    6.3 精灵帧类CCSpriteFrame

    一个精灵是一个固定的节点,可以有很多精灵帧,精灵帧之间的切换构成动画,CCSpriteFrame对象用于表示精灵的帧。CCSpriteFram对象通过贴图类CCTexture2D定义。CCSpriteFrame继承自CCObject。

    6.4 精灵帧缓存类CCSpriteFrameCache

    CCSpriteFrameCache用于提前存储精灵帧以提高效率,CCSpriteFrameCache是单实体类,所有精灵共享使用。继承自CCObject。

    7. 摄像机类CCCamera

    所有节点都拥有一个摄像机类CCCamera对象,当节点发生缩放旋转或位置变化时,需要覆盖CCCamera类,使得节点通过CCCamera类重新渲染。当使用摄像机类实现缩放旋转和位置变化时,CCNode类本身的缩放旋转这些方法不能同时使用。

    CCCamera类通常用于实现三维效果,如果只需要实现二位特效,更推荐使用CCFollow类。

    8. 容器类CCArray和CCDictionary

    9. 拖动渐隐效果类CCMotionStreak

    实现游戏对象运动轨迹上的渐隐效果。继承自CCNode类、CCTextureProtocol类和CCRGBAProtocol类。

    10. 绘制图形

    重新CCNode类的draw()方法并在其中绘制图形。所以自定义的继承字CCNode的对象都可以通过重写draw()方法来绘制。

    cdDrawLine绘制直线,ccDrawPoint绘制点,ccDrawCircle绘制圆等。

    11. 时间调度

    所有CCNode的子类都具有时间调度函数,schedule(schedule_selector(Class::method), 10.0f);

    第一个参数使用schedule_selector将函数名传进来,第二个参数是时间间隔,定义这个参数后会隔一段时间调用一次该函数,知道unschedule被调用。

    unschedule(schedule_selector(Class:method));

  • 相关阅读:
    Ubuntu16.04更新源后apt-get update报错的解决方法
    安装Ubuntu16.04 64bit系统时出错的解决方案
    采用Python-Qt5制作置顶透明桌面提醒词/座右铭/便签
    如何手动解析Keras等框架保存的HDF5格式的权重文件
    读取yml配置文件中的值
    添加20位随机数,不重复,可以用来作为发票申请流水等功能
    java 从json串中取出某个字段的值
    Spring事务的两种方式
    (附表设计)超级全面的权限系统设计方案
    nfs 测试
  • 原文地址:https://www.cnblogs.com/litterrondo/p/3090997.html
Copyright © 2011-2022 走看看