面试题..

1.多态的做用:

允许不同类 对同一消息做出反应,可以产生不同的效果 。

 

2.h头文件中的ifndef/define/endif的作用?

     防止该头文件被重复引用

3如何判断一段程序是由C 编译程序还是由C++编译程序编译的?

用判断宏的方式。大多数编译器在编译时如果是c++的程序都会定义一个叫_cplusplus的宏。
因此可以用这段代码来判断
4. 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”?

++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。
假设某个C 函数的声明如下:
void foo(int x, int y);
该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号externC来解决这个问题
5.队列和栈有什么区别?(先进 先出 丨先进 后出)
遍历数据速度不同。栈只能从头部取数据 也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性队列怎不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多
6.cocos的 autorelease和release的区别
在cocos2dx中,内存管理采用的技术机制,并不是new完之后下一步就delete,它的管理方式是在new了之后,我们需要对它进行计数加1直至这个计数为0的时候,我们才delete掉它。

release是在retain后,调用release即刻将计数减1,直至为0的时候,我们才delete掉它。

autorelease却不是这样的,在调用了autorelease之后,它将该对象添加到在下一帧动画开始的时候、,在将计数减1直至为0,delete掉它

7.减少内存开销的方法有哪些,图片压缩方法有哪些

图片压缩方法

private Bitmap compressImage(Bitmap image) {         ByteArrayOutputStream baos = new ByteArrayOutputStream();         image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中         int options = 100;         while ( baos.toByteArray().length / 1024>100) {    //循环判断如果压缩后图片是否大于100kb,大于继续压缩                     baos.reset();//重置baos即清空baos             options -= 10;//每次都减少10             image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中         }         ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中         Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片         return bitmap;     }

8.如何对手机游戏进行优化

采用工具对资源进行[打包],例如TexturePacker  等工具。

2. 采用png压缩工具等,在打包图片前对每张图片进行[压缩]

如果以上两点都做了还是体积过大,那么继续采取如下办法:

3.   [降低图片质量],比如你项目使用的图片是24bit,那么你可以采用低一些的,例如8bit的图片质量类似。 (ps.别说这样会让图片失真,先试试降低到什么程度的bit最合适再说)

4. 使用特定的压缩格式的图片,例如[wdp] 等等

5. 如果项目中帧序列动画占的比较多,那么可以采取[降帧]的方式来优化。

6. [缩放] 图片!举例,假设你项目用了10张500*500规格的图片,那么你可以让美术把这种图片缩放70%~80%,然后用这种缩放过的图片进行程序放大。(这种方式的图片质量是否会看起来失真,完全取决于缩小的倍数决定,可以适当调整缩放倍数,但是此方法绝对可行!)

7.如果以上方式都优化过,那么可以采取 [换思路]方式,假设你的地图是一张500*500的大图作为背景地图,那么你要考虑是否可以采用地图编辑器来进行拼接的方式来进行!

8. 采用[编辑器],可以利用地图编辑器、动作编辑器、骨骼编辑器等从而减少资源的使用从而达到减少体积,降低内存的使用。

9. 如果以上方式还都无法让你的项目包体积降低,那么你只能采用[在线更新下载]了,将程序包分为两部分,一部分是启动游戏所需的必要资源,另外一部分是游戏启动非涉及到的资源,将启动不会使用的资源放在服务器端,通过在线更新方式,从服务器将其他资源下载到客户端即可。

10. 再如果以上方式都采用后还是体积偏大,宝贝,你只能来个[阉割版]了,常命名为[xxx Lite]

9.cocos2d-x的图形渲染机制是什么

 游戏引擎是对底层绘图接口的包装,Cocos2d-x 也一样,它是对不同平台下 OpenGL 的包装。OpenGL 全称为 Open Graphics Library,是一个开放的、跨平台的高性能图形接口。OpenGL ES 则是 OpenGL 在移动设备上的衍生版本,具备与 OpenGL 一致的结构,包含了常用的图形功能。Cocos2d-x 就是一个基于 OpenGL 的游戏引擎,因此它的绘图部分完全由 OpenGL 实现。OpenGL 是一个基于 C 语言的三维图形 API,基本功能包含绘制几何图形、变换、着色、光照、贴图等。除了基本功能,OpenGL还提供了诸如曲面图元、光栅操作、景深、shader 编程等高级功能。
10.场景切换的内存处理过程是什么。

先构建新场景,然后显示新场景,然后释放旧场景。但是在新场景onEnter,旧场景onExit的时候,会调用旧场景的cleanup,清理schedule的相关部分。
11.简述cocos2d-x的屏幕适配解决方案

kResolutionShowAll

等比例拉伸,直到宽度或高度达到屏幕的尺寸,但是:如果游戏的设计分辨率比率和设备的屏幕分辨率比率不同,最后会出现黑边。结论:无法使用,黑边出现不符合很多渠道和应用商店的规范。这个参数说的明白一点就是当我们等比率的扩大和缩小我们的图片资源的时候,最先和屏幕的宽或者是高相匹配后就不再拉伸另一边了,当资源图片的宽高比和设备的宽高比不同时肯定有黑边。

kResolutionExactFit

非等比例拉伸,图像拉伸到整个屏幕。但是:如果游戏的设计分辨率比率和设备的屏幕分辨率比率不同,最后游戏画面失真。结论:可以使用,但是效果很差。

kResolutionNoBorder

等比例拉伸,直到宽度或高度达到屏幕尺寸,且保证在另一方向上不会出现黑边。就是当我们等比率的扩大和缩小我们的图片资源的时候,当比率小的那一个边和设备的边重合时,比率大的那一个边就出去了,所以虽然不会留下黑边,但是有的图片资源出去了,也许我们写的某一个控件就出去了。

12。简述cocos2d-x 3.0与Cocos2d-x 2.X版本有哪些区别? .

Cocos2d将符合语义版本控制,
这意味着更新不会打破向后兼容性
对整个 API 进行重构清理,隐藏私有属性,命名风格更加一致,移除老的无用的类
大量改进对触摸操作的支持,任意节点都可以处理触摸和多触摸
Cocos2d 集成物理学可无缝和怪物或者任意其他节点工作,完全是 Objective-C 的
包含 UI-Kit,只需要简单数行代码就可以添加按钮、文本框、滚动视图以及滑块
改进多分辨率支持
图形编辑器支持,集成支持 SpriteBuilder
改进 TrueType 文字,支持轮廓、阴影和属性字符串
通过 Apportable 实现跨平台支持,你的游戏不用修改就可以在 Android 下编译





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值