2024年6月15日发(作者:)
Cocos2d-x面试题
(无脑码农)
1,阐述cocos2d-x 中CCScene CCLayer CCSprite CCNode
CCScene:
CCScene是app工作流程上独立块,一个app可能拥有多个scene,但是在任何时候只能有
一个是激活状态的。一个CCScene对象由一个或多个CCLayer组成,layer之间是前后相连的。
Layer提供了scene的外观和行为。通常的用法是直接用一个或多个layer实例化一个scene
CCScene的子类CCTrasitionScene实现移动transitions,提供两个scene之间的转移效果,由
于scene是CCNode的子类,所以scene可以手工或者用aciton来转变坐标。所有层和精灵
都是他的(子节点)children。
CCScene的4个基本方法:
runWithScene(运行画面),
replaceScene(替换场景 例如从主菜单进入游戏界面),
pushScene(暂停界面),
popScene(从暂停的界面还原到游戏界面)
Layers:
CCLayer同样是CCNode的子类,通常用addChild方法添加子节点。
CCLayer对象定义了可描绘的区域,定义了描绘的规则。CCLayer可以实现半透明的效果,
层的事件相应机制 : 最外层最先接受到事件(屏幕触碰),最后是底层,如果在
某层处理了该事件,则后面的层不会在接受到事件信号
Sprites
cocos2d的sprite对象就是一个可以移动、选择、伸缩、动画的2d图形,CCSprite
对象的子成员中可以包含其它的CCSprite 对象。当CCSprite 对象转换坐标系的
时候,它所包含的CCSprite 对象也会转换转换坐标系。sprites 是CCNode 的子
类, 所以他们也可以使用actions来转换坐标. See Actions for more detail about
actions.
CCNode是场景、层、菜单、精灵等所有节点的父类,它是一个抽象类,没有可视化表示形
式,定义了所有node共有的属性和方法。
2,说一下CCAction和CCActionMessager
CCAction是动作的基类,主要使用CCFiniteTimeAction有限次动作执行,就是按
时间顺序执行一系列动作,执行完后动作结束;
CCFiniteTimeAction又分为CCActionInstanse(瞬时动作的基类)和CCActionInterval
(延时动作的基类)。CCActionInstanse:没什么特别,跟CCActionInterval主要区
别是没有执行过程,动作瞬间就执行完成了;CCActionInterval:执行需要一定的
时间(或者说一个过程)。我们用的最多的就是延时动作,下面对它进行单独介
绍。
CCActionMessage是管理所有Action的单例,一般情况下并不直接使用这个单例,
而是使用CCNode的接口,但是假如你想操作的目标不是CCNode的子类或者你
想暂停/恢复行动就要使用到CCActionMessager
3,你常用的cocos2d-x工具
TiledMap (地图编辑器)ParticleEditor(粒子编辑器)
cocosBuilder(可视化编辑)
Texture Packer(图片组合工具)等
4,简述:CCDirector CCEGLView CCEGLViewProtocol
CCDirector是singleton模式的共享的对象。它知道当前哪个scene是激活。 CCDirector以stack
的方式处理scenes的调用(当另一个scene进入的时候,暂停当前的scene,完成之后再返
回原来的 scene),CCDirector 负责更换CCScene,在 CCLayer 被push的时候,更换或结束当
前的scene。另外:CCDirector 负责初始化OpenGL ES。
作用:
1.访问和改变场景
2.访问cocos2d的配置细节
3.访问视图,(openGL, UIView, UIWindow)
4.暂停,恢复和结束游戏
5.在UIKit和OpenGL之间转换坐标
CCEGLView是CCEGLViewProtocol的子类,是用于屏幕适配(这
个问题还没全解决啊)
5,简述CCSpriteframeCache CCSpriteBatchNode,并说出CCNode,
CCSprite是如何实现绘制的
CCSpriteFrameCache 缓存了所有CCSpriteFrame. 可以一下方式获取特定frame并设定给
Sprite. 前提是文件已经缓存
CCSpriteBatchNode 中的所有CCSprite只会被渲染1次,因此可以提高游戏的FPS。
限制:加入到 CCSpriteBatchNode 中的CCSprite必须使用同一张纹理图。
比如游戏中的子弹 就很适合用它,因为子弹都是一个样子。通过TexturePacker生成的纹理
图也适合使用它。
(第二问不会)
6,cocos2d-x的屏幕适配解决方案
之后
pEGLView->setDesignResolutionSize(480, 320, kResolutionNoBorder);第三个参数,
找到定义:


发布评论