当前位置: 首页 > 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地图是一个页面里面,不允许滚动 ?--- >消消乐这种;
你就可以把地图,部署在公共区域,其它的背景做衍生就可以了。

http://www.lqws.cn/news/116443.html

相关文章:

  • CentOS7 + JDK8 虚拟机安装与 Hadoop + Spark 集群搭建实践
  • Kafka入门-集群基础环境搭建(JDK/Hadoop 部署 + 虚拟机配置 + SSH 免密+Kafka安装启动)
  • 解决IDE编译JAVA项目时出现的OOM异常问题
  • 分类与逻辑回归 - 一个完整的guide
  • springboot ErrorController getErrorPath() 版本变迁
  • Springfox 和 Knife4j 集成404 问题
  • 期末复习(学习)之机器学习入门基础
  • 705SJBH超市库存管理系统文献综述
  • Oracle OCP与MySQL OCP认证如何选?
  • SpringBoot(七) --- Redis基础
  • Ubuntu 25.10 将默认使用 sudo-rs
  • web全栈开发学习-01html基础
  • PyTorch学习笔记 - 损失函数
  • C++ 使用 ffmpeg 解码本地视频并获取每帧的YUV数据
  • 大数据学习(128)-数据分析实例
  • 数据结构(8)树-二叉树
  • [ Qt ] | 与系统相关的操作(二):键盘、定时器、窗口移动和大小
  • Go语言爬虫系列教程4:使用正则表达式解析HTML内容
  • 大数据学习(129)-Hive数据分析
  • hive 3集成Iceberg 1.7中的Java版本问题
  • ‘pnpm‘ 不是内部或外部命令,也不是可运行的程序
  • 安全-JAVA开发-第二天
  • 一个完整的时间序列异常检测系统,使用Flask作为后端框架,实现了AE(自编码器)、TimesNet和LSTM三种模型,并提供可视化展示
  • Vue插件
  • 几何绘图与三角函数计算应用
  • Vue-Todo-list 案例
  • 点评中是如何实现短信登录的
  • JUC并发编程(二)Monitor/自旋/轻量级/锁膨胀/wait/notify/等待通知机制/锁消除
  • 网络攻防技术十四:入侵检测与网络欺骗
  • 哈希表入门:用 C 语言实现简单哈希表(开放寻址法解决冲突)