cocos2dx 18个易忽略的知识点

一、const与define的区别
1.const修饰的是有数据类型的,在编译时编译器会对其进行数据类型安全检查
2.define只是简单的宏替换 ,不对进行数据类型安全检查
const实现机制:const用来说明定义的变量是只读的。实现机制:这些在编译期间完成,编译器直接使用常数来替换掉对此变量的引用

二、重载:参数列表不同(1.参数个数不同2.参数类型不同)
        重写:子类实现从父类继承来的方法

三、struct与class的区别 :
最本质的一个区别就是默认的访问控制: 
默认的继承访问权限
struct是public的class是private的
struct与union的区别是所有的成员共用一块地址空间,给其他成员赋值会造成重写

四、虚函数
父类对象指向子类对象,子类重写父类中的函数, 这时候 若声明为虚函数,该父类对象将调用正确版本的函数,即为该子类重写的函数。

五、我们将对文件的操作封装到类中以方便使用
操作文件类型为XML文件,其他类型的大致原理一致
xml文件的类型:
  <SignWang  firstname = ' />
 解释:firstChild->getvalue=SignWang
      signWang->getfirstAttritube 得到xmlelementAttribute * 类型的属性
      属性 ->name=firstname;
     属性 ->value=‘万'   

六、内存管理
1、cocos2dx来源于cocos-iPhone,采用的是oc的内存管理机制分为两种(1、自动释放autorelease 2、手动释放 release )autorelease加入自动释放池,在每帧刷新的时候释放,而release则是直接释放
2、节点子树管理(都继承自Node节点)
3、cache缓存管理(精灵帧缓存、纹理缓存)spriteCacheNode加载一次
(内存分区:堆区、栈区、常量区、静态区、代码区)

七、设计模式
设计模式:单例模式 ,(特点:只被初始化一次,永久存在)缺点:会一直占用内存空间
要求:1、本类的静态对象(注意需要在类外进行初始化,指针的话让其指向空)
           2、得到这个成员变量(对象)的静态方法

八、 同一时间只有一个场景在运行
       节点的各个子节点锚点均为(0.5,0.5)
       (Layer只是cocos2dx底层中忽略其锚点,导致使用的时候将其看做锚点为(0,0))

九、WinSize  设备的尺寸
        FrameSize 画框大小
       VisibleSize 可视化区域

十、引用计数
create,add,添加进数组均会使引用计数+1,remove则会-1

十一、Label 与 MenuItem  
auto label2 = Label::createWithBMFont("sign.fnt", "123");
// 注意调用的是 sign.fnt格式
auto label3 = Label::createWithCharMap("tuffy_bold_italic-charmap.plist");
// 参数是字体文件plist
 
auto item5 = MenuItemAtlasFont::create("Cl", "tuffy_bold_italic-charmap.png", 48, 64, ' ');
// 参数解释依次是字体文件、每个字的宽度、高度(宽高需要到对应的plist查看)、文件中第一个字符是  
menuItem必须添加到menu中,menuItemToogle必须要设置select index值,0的话初始化为itemImage1的样子

十二、 onEnter(), onExit()
    // 刚开始创建调用(对应的资源,成员变量初始化在构造函数里面调用)
    // 对应的初始化UIonEnter()中实现
   
void onEnter();
   
// 释放资源(对应的资源,成员变量在析构函数里面释放)
   
// 对应的UI移除在onExit()中实现
    void onExit();

十三、repeatForever中有sequence是可以执行的,可以一直执行序列动作,反过来不行
因为在执行序列动作时候是依次执行,执行到repeatForever,程序会死到那里

十四、 关于随机数rand(),srand();的使用
  rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。

要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
      要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)

十五、动作
摄像机动作,每个精灵都默认带有一个摄像机
OrbitCamera :: create ( 2.0f , 1 , 0 , 0 , 90 , 0 , 0 )
起始Z角及旋转Z角,我们目前可以理解成摄像机沿着球面的的水平方向旋转。
起始X角及旋转X角,可以理解成摄像机沿着球面的的垂直方向旋转。
参数解释:执行时间、摄像机离目标的半径,半径差,起始Z角
removeSelf() action删除动作
progressTimmer // 进度条动作

十六、触摸  
(1)单点触摸优先级永远比多点触摸高
(2)多点触摸没有吞噬
lis-> setSwallowTouches ( true );// 设置吞噬触摸(条件1.设置为true2.onTouchBegin返回值为True)
EventListenerTouchOneByOne// 设置单点监听
bool HelloWorld ::onTouchBegan( Touch *touch, Event *event)// touch为点击屏幕的点  event->getCurentTarget()可以得到点击对象
监听器只能被注册一次,在被注册需要用到clone()函数

十七、 MessageBox ( " 体力值不足 " , " 提示 " );
// 系统提供的弹出框 第二个参数是标题,第一个是内容(支持中文)

十八、进度条 LoadingBar默认为不开启九宫格
区分进度条动作  :
auto spr = Sprite :: create ( "HelloWorld.png" );
    auto pro = ProgressTimer :: create (spr);
    pro-> setType ( ProgressTimer :: Type :: BAR );//bar为矩形radios为圆形展开
    pro-> setBarChangeRate ( Vec2 ( 1 , 0 ));// 展开方向为x正方向
    pro-> setMidpoint ( Vec2 ( 0 , 0.5 ));// 设置中点(类似锚点)
    pro-> setPercentage ( 50 );// 设置percent
   
    auto progress = ProgressTo :: create ( 2.0f , 100 );// 创建动作
    pro-> runAction (progress);
    pro->
setPosition ( 400 , 300 );
    addChild(pro,10);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值