一、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()
// 刚开始创建调用(对应的资源,成员变量初始化在构造函数里面调用)
// 对应的初始化UI在onEnter()中实现
void onEnter();
// 释放资源(对应的资源,成员变量在析构函数里面释放)
// 对应的UI移除在onExit()中实现
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 );
pro-> setPosition ( 400 , 300 );
addChild(pro,10);