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

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.xdnf.cn/news/11773.html

相关文章:

  • Windows+Linux安装redis教程
  • Qt 中,设置事件过滤器(Event Filter)的方式
  • Java面试专项一-准备篇
  • 【2025】使用docker compose一键部署项目到服务器(4)
  • 【Web应用】若依框架:基础篇14 源码阅读-后端代码分析-课程管理模块前后端代码分析
  • WINDOWS11安装ipython3
  • sql入门语句-案例
  • ‘pnpm‘ 不是内部或外部命令,也不是可运行的程序
  • DrissionPage调试工具:网页自动化与数据采集的革新利器
  • Kafka消息队列
  • 洛谷 P1758 [NOI2009] 管道取珠(DP)
  • 小型民用AUV用途与研究
  • Linux RPC 和 NFS 教程
  • postman自动化测试
  • 玄机-日志分析-IIS日志分析
  • 网络各类型(BMA,NBMA,P2P)
  • Apache POI操作Excel详解
  • 微信小程序实现运动能耗计算
  • 区域徘徊检测算法AI智能分析网关V4助力公共场所/工厂等多场景安全升级
  • 时序数据库IoTDB与EdgeX Foundry集成适配服务介绍
  • RabbitMQ 开机启动配置教程
  • 前端判断内容文字是否溢出容器,创建临时元素来模拟文本实际宽度
  • JavaWeb:前后端分离开发-部门管理
  • 第四十二天打卡
  • [特殊字符] 革命性AI提示词优化平台正式开源!
  • sylar--线程模块
  • 电网“逆流”怎么办?如何实现分布式光伏发电全部自发自用?
  • 无监督学习-Complete Guide (较长)
  • yum更换阿里云的镜像源
  • 十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言配置