当前位置: 首页 > news >正文

Cocos creator游戏开发面试题

1.2D游戏开发的角色动画有哪些方式,各有什么优缺点
    角色动画(动作动画):人物,怪物等
    动画分为两类:
            ·动作动画:
                ~帧动画:动画根据一帧一帧的时间间隔来播放也就是切换我们的图片
                ~骨骼动画:角色动作就是一个一个的骨骼 通过我们的骨骼动画工具来编辑,每个骨骼在动画每一帧的位置和运动的情况
            ·位移动画:动画编辑器来控制动画路径来做,或者用程序来控制角色,按照路径来走

·帧动画和骨骼动画的优缺点:
    帧动画:性能好,每次渲染的时候只要把贴图贴过去。缺点:占内存,每个帧都是图片,所以占内存(适用于一些RPG游戏,有角色,怪物 ,但也会有骨骼动画)
    骨骼动画:用spine,dragbonus--》导出的就是图集图片+骨骼在图集中的位置+运动控制参数。省内存,省空间-》图片的空间,都是一个一个骨骼,和骨骼的位置没有关系。缺点:每一帧都要CPU来根据骨骼运动的控制参数来计算骨骼每帧的 位置(pos,rot旋转等)-》消耗CPU

·选择帧动画和骨骼动画:要在内存和性能做一个取舍,选择最合适的就可以


2.2D游戏的Drawcall如何优化
    图片(Sprite)+文字(Label)
    Drawcall:CPU给GPU下达draw cmd的次数
    性能优化而言,把越多的东西一起提交给GPU一起绘制性能会更好,Drawcall越低性能越好
    ·能够在一个Drawcall渲染的必要条件:
        就是要在同一个图集里面:SpriteA和SpriteB一起绘制-->就需要AB对应的图片在一个大图里面。然后CPU把一个大的纹理给GPU。AB只是uv坐标不一样。
        AB是同一个mesh(纹理)也就是一个quad(两个三角形)。都是用Sprite Shader 也就是AB可以一起合并,提交给GPU一起渲染。所以就只需要使用一次Drawcall
    ·场景的层级关系决定要渲染哪些物体:
            渲染物体的提交顺序-->GPU
            A1A2A3...AN|B1B2B3...BN|...
            同一个图集A里面的不同Sprite;同一个图集B里面的不同Sprite;
                游戏引擎就会尽可能将能够一个批次的物体一起提交给我们的GPU
                A1A2A3...AN-->GPU-->GPU绘制-->drawcall
                B1B2B3...BN-->GPU-->GPU绘制-->drawcall
    ·2D drawcall优化:(1)尽可能让渲染的物体在同一个图集里面
                    (2)不要让其他图集的物体打乱了我们渲染顺序
                    (3)Label 其实是把文字用适量渲染工具(freetype)放到文字纹理里面
                        多个Label 使用Chat模式可以放在一张text纹理里面
                        每个Label生成一个纹理的话就无法合批
 

3.Creator如何支持地图的分块加载
    ·制作2D游戏地图的方式:
        (1)用ps (2)Tiledmap (3)Cocos自己的编辑器来拼接游戏地图
    ·地图分块是怎么回事?
        内存和计算资源吃不消
    ·地图的分块原则:逻辑不分,视图分
    *地图分块以后,我们的动态加载:
        ·核心思想:只加载角色周围的地图块,不是在角色周围的,我们就把这些地图块卸载
                   在角色周围的我们就动态加载进来
        1.我们根据实际的情况,将大地图分块。多大一块?根据实际需求来,也取决于动态加载的算法
        2.选取一个动态加载的算法-->九宫格的算法
            九宫格:就是加载角色周围的9个块,卸载之前不用了的块。
            地图分块的大小,就是结合九宫格以后,周围的地图的大小足够覆盖你的视野(手机屏幕)
            在资源够的情况下,分的块越少越好,对玩家是更流畅的
        3.九宫格算法,是如何触发地图“视图”
            ·初始化,当主角玩家出生到地图以后,首先根据玩家在大地图的位置,算出来玩家所在游戏地图的块以及周围8个块,然后把这8个块的地图视图资源加载进来,创建到我们的游戏场景中。
            ·玩家的移动,是触发地图动态加载的原因
                


4.2D游戏如何实现地图跟随玩家滚动? 边界情况如何处理?
    ·地图的大小,超过了屏幕的大小。玩家移动多少,摄像机就跟着移动多少,玩家始终就会保持在屏幕的中央
    ·边界情况:
        1.根据地图大小,根据屏幕大小,计算出摄像机的位置可以移动的坐标范围
        2.当摄像机跟随玩家的时候,还是跟着玩家的坐标来更新,但是更新完后,要判断一些,x的限定范围和y限定范围。x<x_min(max),x摄像机=x_min(max)
    ·


5.2D游戏中物理引擎如何优化?

    ·游戏开发中的性能热点:渲染,物理引擎,逻辑代码(可能不大)
    ·物理引擎性能和刚体数目挂钩
    ·物理引擎非常消耗开销:
            运动的物体都是要参与计算,无法待机
    1.物理引擎的内核:(改善不大)
        Box2D作为2D物理引擎的内核;
        common内置的物理引擎内核
    2.选取形状简单的shape,collider碰撞器:圆形>矩形>多边形
    3.物理引擎的迭代的时间间隔设置,项目通用设置里面    
    4.给代替方案。地图做成格子


6.游戏开发中如何处理excel表格?
    *如何解析excel:
    excel表格是策划比较喜欢使用的一个表格,但Cocos无法直接处理,需要转换
    ·1.excel->json文件,用flashexcel
            ·-》csv文件

    2.加载文本文件->TestAsset来加载
        json,csv都是TestAsset加载-》就可以得到文本的内容
    3.解析
        json-->JavaScript/typescript--》直接使用API,就可以解码成object对象直接使用
        csv-->内置的csv文本解析库--》直接使用API解析

    *如何与策划配合
        提炼策划的需求
        字段ID 字段1,字段2,字段3.。。
        string string number int
内容1
内容2
内容3
内容4


    解析,使用->查询对应的数据

7.说说屏幕适配的原理与常用手段
    分析题目:
        1.美术:设计分辨率
        2.适配策略
    === >

    1:美术在设计我们的UI的时候,他以一个设计分辨率来做设计?
    a:我们要能适配当下目标主流的机型;1920x1080
    b:我们还要考虑我们的内存大小:1920x1080 --- >设计 --- 》内存占用,960x540内存占用大;
    用户的手机屏幕+内存大小 --- 》设计分辨率;
    1920x1080, 1280x720;

    2:当我们设计分辨率定下来了以后,我们所有的设计基于这个分辨率来做;
我们的UI --- 》不同的手机屏幕 1280x720设计分辨率 ---- 》1920x1080这个目标屏幕上;
横向的维度来进行调整,纵向的维度来进行调整;
游戏引擎引入了一个逻辑分辨率的概念;就是将我们的适配的 --- 》逻辑分辨率,在逻辑分辨率上做适配;
逻辑分辨率:就是让一个维度不变,另外一个维度来适配 --- 》2个维度需要适配的问题 --- 》只在一个维度上做适配;

做一个决定:你到底是哪个维度不变?FixedWidth,FixedHeight,假设我们是1280x720,采用固定高度的模式;
游戏引擎就可以根据手机屏幕 --- 》算出来我们的逻辑分辨率;
scale = 1080 / 720 = 1.5
逻辑分辨率:(1920/1.5=1280) x720 === > 1280x720


ipad:1024x768 设计分辨率是 1280×720,适配策略是固定高度;
scale = 768 / 720 = 1.0667

逻辑分辨率:(1024/1.0667 = 959.97 )x720==> 959.97x720
    适配问题就变成了,我们基于逻辑分辨率来排布,把1280×720==== > 959.97×720

渲染的时候:Node --- >大小 逻辑大小*scale=渲染的大小 ;---- >GPU渲染出来就可以了


3.常用手段:
    布局:基于我们的停靠点来布局,基于某些特定位置来停靠--》widget
    大小:widget
    背景图片:1.加缩放,让背景铺满整个屏幕
            2:我们就是做一个大一点的图,让所有主流的手机分辨率都能盖住屏幕,就可以了;

2D地图超过屏幕,那么这个时候我们就可以做地图滚动;

2D地图是一个页面里面,不允许滚动 ?--- >消消乐这种;
你就可以把地图,部署在公共区域,其它的背景做衍生就可以了。

相关文章:

  • 分享一颗PD协议芯片(取电sink芯片),ECP5701输入电压3V-28V
  • COMSOL与MATLAB联合仿真人工智能的电学层析成像系统
  • Visual Studio C++ 调试日志与异常定位指南
  • 一则systemctl service诡异问题
  • PWM 相关知识整理
  • 【趣味Html】第11课:动态闪烁发光粒子五角星
  • #Java篇:学习node后端之sql常用操作
  • 解决docker运行zentao 报错:ln: failed to create symbolic link ‘/opt/zbox/tmp/mysq
  • 双栈共享一个栈空间
  • 小黑黑日常积累:dataclass的简单使用
  • 高效使用AI大模型:测试工程师提示词编写框架
  • [Java 基础]面向对象-继承
  • 【el-progress】element UI 进度条组件
  • 时间序列预测:LSTM与Prophet对比实验
  • Spring AI Tool Calling
  • 深入解析Java17核心新特性(密封类、模式匹配增强、文本块)
  • C++ 变量三
  • 前端八股之JS的原型链
  • 项目实战——C语言扫雷游戏
  • MySQL ACID 面试深度解析:原理、实现与面试实战
  • 网站如何做https/厦门百度关键词优化
  • 怎么在导航网站上做推广/优化设计答案六年级
  • 昭通公司做网站/如何做推广宣传
  • 网站怎么做别名/快速建站
  • 奢做品二手 哪个网站好/短视频seo关键词
  • 做网站需要学jq吗/宣传推广方案范文