Cocos2dx基础使用相关面试题

根据上次去面试人家HR所提的一些问题做的整理,答案部分是网上找的,关于基础使用,大致会问如下几个问题:
Cocos2d-x的执行流程和基础对象
Cocos2d-x对相关工具的了解
Cocos2d-x其他常见问题
如是如何进行内存管理的,所使用的各种设计模式,屏幕适配解决方式

1.Cocos2d-x的执行流程和基础对象
(1)执行流程
我们知道Cocos2d-x程序的执行顺序是从AppDelegate这个类开始,在其中做一些必要的初始化并创建运行第一个场景,之后有一个主循环来维持游戏每一帧的循环,并在此期间执行游戏的相关逻辑。当游戏结束时,会调用导演类的end方法,将会执行游戏的清理工作,并结束了OpenGL视图的运行。不同的平台会有不同的封装,PC端由OpenGL封装,移动端则由OpenGLEx,最后退出游戏进程,结束了整个游戏的运行。
(2)基础对象
①导演(Director)
它将提供当前运行所需一切必备的信息,如帧率,与上一帧间隔的时间;屏幕分辨率以及用于循环执行的时间表等等,而最重要的功能是管理当前的游戏场景。导演类将是Cocos2d-x中最关键的一个类。
②场景(Scene)
它则主要侧重于定义不同场景的用途,如开始界面,游戏关卡,设置选项界面等等,每一场景都有自己相应的布景或者角色。但是它往往不直接显示场景的内容,而将依赖场景中的图层,每一个场景往往有多个图层。
③图层(Layer)
它主要用于布置场景,如游戏中远处的森林和近处的山丘将会使用一个图层,近处的怪物和英雄可能会使用一个图层,再近处的一些装饰和遮挡也会使用一个图层。甚至一些更加复杂的游戏,充当背景的图层还不只一个。如多个背景错开,还设置上不同的移动速度,可以形成场景的生动效果,从而提升游戏的吸引力。
④精灵(Sprite)
它和所有显示对象一样都继承与Node对象,它是最最最常用的显示对象。它可以加载资源图片并展示在屏幕上,在游戏或电影里,精灵就像电影里的演员;它可以充当玩家控制角色,也可以充当程序控制角色。还有食物,树木,宝贝等等,都可以用精灵来充当。
⑤动作(Action)
在游戏中,无论是玩家操作的英雄的各种行为,敌方怪物的各种行为,还是其他怪物的一些变化,基本都是由一些单独的动作叠加来完成的。如控制精灵的旋转,移动和缩放,还有一些复杂的对象,如跳远,贝塞尔曲线和改变颜色等等。

总而言之,一个导演可以管理多个场景,每个场景代表游戏中的一个关卡或一个界面,一个场景中可以包含多个布景,有的可能代表背景,有的可能代表前景,背景可能不止一个。一个布景可以包含多个精灵,精灵可以是玩家控制的英雄,可以是敌方的怪物。精灵根据游戏情节的需要可以单独执行某一段动作,连续执行一系列动作,或者执行多个动作,如跑步的同时进行旋转等等。

2.Cocos2d-x对相关工具的了解
问:你常用的Cocos2d-x相关的工具有哪些呢?
在这里我们想到的有Cocos studio,TiledMap,ParticleEditor(粒子编辑器),Flash,PS等等
①Cocos Studio
Cocos Studio是一款功能强大的编辑器,即界面编辑,场景编辑,动画制作,3D场景编辑,图集合并等功能为一体,可以快速的发布资源,可以说是游戏开发一站式解决方案,运用低成本、高效率;高性能,一次制作,多终端平台共享的特性;并且它有丰富的插件,素材库,使游戏开发更加灵活更加便捷。
②TiledMap
地图编辑器,采用的是传统像素游戏所使用的固定方格的拼接方式,可以使用极少的纹理制作丰富的场景,新版本的Cocos2d-x支持老版本TiledMap的菱形格式的地图。
③ParticleEditor
粒子编辑器,提供了丰富的粒子特效,大部分情况下只需要修改它提供的模板就能达到自己想要的效果,最终可以保存成*.plist文件格式,Cocos2d-x对它的支持非常的不错
④Flash、PS
这就不多说了,这些都是美术必备的软件,由于Flash制作动画的功能强大、历史悠久,使用它制作动画效率非常高,因此我们常常会使用Flash制作动画,导出成cocos2d-x所支持的格式。这样,我们的动画不仅制作效率,还与游戏引擎进行接耦,对不同的平台,只要做出一个相应的导出插件即可

3.Cocos2d-x其他常见问题
①Cocos2d-x是如何进行内存管理的?
目前主要有两种方式实现智能管理的技术,一种是引用计数,一种是垃圾回收。而Cocos2d-x采用的就是引用计数方式,为此实现了自己的根类(Ref),每一个对象都包含了一个对生命周期控制的引用计数器,构造函数创建时会对该引用计数器赋值为1,这代表没有实际引用。当要引用对象时,调用retain方法,之后引用计数加1;当引用结束时,调用release方法,引用计数减1。而autorelease方法会将对象放入一个自动释放池,实现灵活的垃圾回收。当每一帧结束的时候,自动释放池的对象就会执行一次release。Create方法将对象加入内存池之后,对象的所有权都属于内存池了,我们返回的指针并没有所有权。而主循环干了一件非常重要的事情:弹出最上层的自动释放池。之后在release全部此内存池中的对象。就是这样的原理,我们可以放心的将对象放入autorelease的池中,在需要的时候,该对象就能智能的释放,同时,在上一级父节点通过addchild向对象获得所有权之后,就能保证该对象不会被删除。

②Cocos2d-x中所使用的设计模式
导演类或者图集缓存类,都使用了单例模式,在全局环境下,他们都只有一个实例。而通知中心,则使用了观察者模式,如果一个类对某个消息感兴趣,只需要在通知中心中订阅即可。而Action则使用了装饰者模式,某些动作之间进行了填充的封装

③Cocos2d-x的屏幕适配解决方案
Cocos2d-x一共提供了5中屏幕适配解决方案。首先我们来看ExactFit,这种方案会将画面投射到屏幕上,如果比例不对,就会进行拉伸,一般大部分游戏是不会使用这种方案的。第二种则是NoBorder,就是没有黑边的意思,它的缺点根据比例裁剪掉上下或者左右的画面。而showall和ExactFit非常相似,只不过不会有拉伸,遇到比例失调的时候保留黑边,不过它也同样几乎不能用,因为现在基本看不到有黑边的应用。而“固定高度”和“固定宽度”则是3.0新加入的方案,固定高度会根据按一定的高度将画面裁剪或留白画面两边,这种模式非常常用,一般横屏的游戏都会采用这种模式。这样一来,在编写代码的时候,获取视图的大小,将会固定“高度”这个值,会发生改变的值为“宽度”,此时我们的逻辑只需考虑如何适应更加宽的手机屏幕即可。而“固定宽度”模式和“固定高度”正好相反,在竖屏的游戏中非常常用。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值