cocos2d-x 面试题
cocos2d-x 是一个流行的开源游戏引擎,广泛应用于游戏开发领域。以下是 cocos2d-x 相关的知识点总结:
1. New 和 malloc 的区别:
New 和 malloc 都是用于申请动态内存和释放内存的,但是它们有所不同。malloc 是 C/C++ 的标准库函数,需要头文件库函数支持,而 new 是 C++ 的运算符,不需要头文件支持。malloc 向系统申请分配指定 size 个字节的内存空间,返回类型是 void* 类型,new 则返回指定类型的指针,并且可以自动计算所需要大小。malloc 分配的是一块内存,不能对所得的内存进行初始化,而 new 建立的是一个对象,可以对其进行初始化。
2. Void func() const; 中 const 的意义:
Const 在这里标识为不可改变对象的成员函数,即“只读”函数。该函数不能修改对象的状态,只能读取对象的状态。
3. 虚函数的理解:
虚函数就是允许被其子类重新定义的成员函数,作用是实现多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。虚函数可以让子类继承父类的行为,并且可以在运行时动态地选择要执行的行为。
4. 指针和引用的区别:
指针和引用都是用于间接访问内存的,但是它们有所不同。指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。指针的值可以为空,引用的值不能为 NULL,并且引用在定义的时候必须初始化且初始化后不可变,指针可变。sizeof 引用得到的是所指向的变量(对象)的大小,而 sizeof 指针得到的是指针本身的大小。
5. 函数模板的理解:
函数模板就是建立一个通用函数,其返回值类型和形参类型不具体指定,用一个标识符来占位。凡是函数体相同的函数都可以用这个模板来代替,只需在模板中定义一次即可。在调用函数时系统会用实参的类型来取代模板中的标识符,从而实现了不同函数的功能。
6. 多态的理解:
多态允许将子类类型的指针赋值给父类类型的指针。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
7. static 和 const 修饰类的成员函数:
不能同时用 static 和 const 修饰类的成员函数,因为 C++ 编译器在实现 const 的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数 const this*。但当一个成员为 static 的时候,该函数是没有 this 指针的。也就是说此时 const 的用法和 static 是冲突的。
8. retain() 和 release() 的关系:
retain() 方法会将对象的引用计数增 1,当需要引用对象时调用 retain() 方法进行引用计数增 1,当引用结束的时候调用 release() 方法进行引用计数减 1。
9. autorelease 的作用:
autorelease() 方法会将对象放入自动释放池实现灵活的垃圾回收。当每一帧结束的时候,自动释放池中的对象都会被执行一次 release(),如果当前对象的引用计数小于 0,则会进行释放。
10. Node、Sprite、Scene、Layer 之间的关系:
Node 是 Scene, Layer, Sprite 的基类,是一个抽象类,没有可视化的表现形式。Scene 是场景类,里面可以放 Layer 和 Sprite。Layer 是层类,里面可以放 Sprite。Sprite 是最小的精灵单元。
11. 有限状态机的理解:
有限状态机根据事件的发生判断是否满足不同状态转换的条件,从而在有限个状态间进行状态转换。
12. cocos2d-x 是如何实现多屏幕适应:
cocos2d-x 通过在 AppDelegate 类的 applicationDidFinishLaunching 函数里调用 GLView 的 setDesignResolutionSize 函数来实现多屏幕适应。其中第三个参数 ResolutionPolicy 可选用的模式有:SHOW_ALL、FIXED_HEIGHT、FIXED_WIDTH、EXACT_FIT、NO_BORDER。
13. 为什么选择 cocos2d-x:
cocos2d-x 拥有发达的开发者社区,能够方便的找到各种问题的解决方案。spine、TexturePacker、Cocostudio 等工具让引擎方便的处理各种资源,UI 问题。而且开源方式也使开发者很方便的研发出适合自己项目的编辑器。Cocos2d-x 开源的优势在于可以根据自身的需求进行自定义修改。