使用地图编辑器构建游戏场景

本文介绍了游戏开发中的关键步骤,包括地图编辑器、关卡编辑器的使用及游戏Demo的制作。详细阐述了不同类型的编辑器如何服务于不同类型的游戏,并强调了这些步骤在优化开发流程、团队协作等方面的重要性。

    地图编辑器在游戏开发的前期扮演着非常重要的角色,它的主要功能就是用来制作游戏地图

    地图编辑器可以使用原生引擎所支持的语言来编写,比如 C/C++;也可以使用引擎加嵌入脚本语言的方式来进行编写,比如 Lua 等。但是现在,一些成熟的游戏引擎都会自带地图编辑器。

地图编辑器的种类

    由于游戏类型的不同,地图编辑器也不相同。类似于《大富翁》类的游戏,需要做一个斜 45 度角的地图编辑器。

    如果是俯视角度的游戏,地图编辑器的视角呈现方式也类似斜 45 度角的游戏。这两种编辑器制作地图的方式极其类似,唯一不同的是,斜 45 度角是用菱形的地图块拼接而成,俯视视角是用矩形的地图块拼接而成的
这里写图片描述

    做一个横版卷轴游戏,就需要在地图编辑器内摆放横版的地图。如果地图是重复地图,类似《超级玛丽》,那就需要程序员重复贴图,而不需要在地图编辑器重复编辑相同的地图。
这里写图片描述
    3D 游戏就会有 3D 地图编辑器,比如《魔兽争霸》编辑器,就是一个 3D 视角。地图编辑器的种类不同,保存的地图类型和文件结构也不一样。有些地图编辑器保存的是图片和位置,而有一些保存的却是一个脚本文件,方便直接载入游戏程序。

了解地图编辑器的编写过程的重要性

    编写地图编辑器,能让你更好地了解游戏引擎 。在编写地图编辑器的过程中,除了音乐模块暂时不会被用到外,利用引擎编写的地图编辑器、地图资源的载入代码、保存代码等等,都会被用在正式的游戏中。

    编写地图编辑器的过程,可以优化游戏开发流程。 程序员之间会讨论关于资源载入、游戏内容加载和读取这些基础问题,并将最基础的流程完整地梳理一遍。在游戏正式开始开发之前,把这些流程梳理一遍,能极大提升开发过程中的流畅性。

    编写地图编辑器的过程,涉及 UI、按钮和键盘事件的使用。地图编辑器开发完毕后,主要是给美术人员使用,所以 UI 的点击、鼠标键盘事件是必不可少的。在地图编辑器中运用 UI、按钮、键盘事件后,在正式游戏开发中,这些代码可以直接移植到游戏代码中使用。

    编写地图编辑器的过程,能起到团队磨合的作用。 在编写的过程中,你会接触到策划、美术等很多人的意见,程序员之间也会对引擎的应用有很多的讨论(这一点在腾讯的游戏开发团队中体现的淋漓尽致,感兴趣的可以去看腾讯王者荣耀团队的游戏创作过程)。

    开发地图编辑器的过程可以帮助开发人员了解引擎、优化开发流程、测试 bug、磨合团队。

地图编辑器与关卡编辑器

    关卡编辑器是一种主要给策划使用的编辑器,它涉及地图中的关卡内容。 一般情况下,关卡编辑器不涉及具体的地图细节,但是它涉及总体的游戏地图和游戏流程。

    地图编辑器的功能就相当于房屋的结构朝向图。我们可以从这张图里,看到每个房间的俯视图。里面包括门的位置、阳台的位置,甚至厕所的位置。而装修公司设计家居,就相当于关卡编辑器的功能。设计师会在你已有房间的结构内,摆放各种桌子、椅子、床、柜子、灯泡等具体的家居用品。

    在实际开发过程中,很多时候,只有一些成体系的大游戏才会把关卡编辑器单独分出来。很多时候,对一些小游戏来说,关卡编辑器和地图编辑器经常是在一起的,你可以在地图编辑器里面直接来编写关卡。

    常见的关卡编辑器的界面一般都是这样的。这个界面最左侧的对话框,是物件的选择界面,具体包括关卡内物件的选择和摆放;界面右侧的对话框是属性选择界面,定义这个物件的属性,比如这个物件是否可以弹跳、爆炸等等;界面右下角是物件 X、Y、Z 轴的编辑,可以自定义物件的拉伸和缩放。
这里写图片描述
    比如FPS 枪战游戏。可以先在编辑器内画完所有俯视角的地图通路,然后在这个地方放上某种武器,在那个地方放上某种升级包。这就是一个关卡的总体架构。

    随后,需要在编辑器里编写一些简单的脚本程序。这些脚本程序会涉及玩家在进入游戏后总体的游戏进程和逻辑。

    关卡编辑器和地图编辑器的功能,就好比家装设计图和房屋结构朝向图,一个是在地图内设置物件的摆放位置和具体的表现形式;一个是设计地图本身。

做游戏 Demo的重要性

    游戏 Demo 是完成游戏核心框架,测试地图编辑器等问题,Demo 最终会被舍弃。

    游戏 Demo 可以完成游戏核心框架。 绝大部分情况下,最终完成的游戏成品,都会和游戏 Demo 有较大的差异。这些差异体现在美术画面的优化细节、操作的优化细节、网络优化上等等。游戏 Demo 所肩负的任务,就是完成该游戏总体的核心内容框架。 在这个框架内,可以一窥游戏的总体逻辑、想呈现给玩家的是什么内容。

    游戏 Demo 可以测试 bug。 在游戏开发中,地图编辑器做完之后,会载入经地图编辑器制作的地图,这些地图在游戏中是否有 bug,是否需要调整,游戏体验好不好。这些内容在游戏 Demo 中将被测试出来,并且在正式开发中进行调整。

    游戏 Demo 可以磨合开发团队。有一些引擎自带地图编辑器,所以大多数情况下,地图编辑器不需要自己编写。这个时候,敲下的第一行代码就是游戏 Demo 的代码,所以游戏 Demo 就是团队人员的磨合。和地图编辑器一样,第一次编写游戏 Demo,会有来自策划、美术、程序等各方面的意见和讨论,而制作游戏 Demo 的过程对磨合团队是非常有利的。

    游戏 Demo 最终会被舍弃。 在开发过程中,Demo 版本是不稳定的,是有 bug 的。只要不是特别严重的,一般不会去进行特别的修正。但是一般来说,bug 会在正式版本中被修正。程序代码在游戏中跑起来是不是有瓶颈,bug 出现在哪里,哪些部分可以从 Demo 中提取出来,在正式开发中使用,哪些部分可以在正式版本中优化,这些都是游戏 Demo 所背负的作用。

    由于游戏类型不同,地图编辑器、关卡编辑器和游戏 Demo,并非是必须要做的内容,就像贪吃蛇、俄罗斯方块、象棋、围棋等等这样简单的游戏,这些都不需要任何编辑器。

    在游戏开发的正规流程中,要经历地图编辑器、关卡编辑器、游戏 Demo、正式开发等几个流程。但简单如游戏,可以直接上手编写代码。

以下是在Zynq 7020上移植LVGL的详细步骤方法: ### 1. 准备工作 - **硬件**:Zynq 7020开发板,确保硬件连接正常,如显示屏等外设。 - **软件**:安装Vivado、SDK等开发工具。同时,从LVGL的官方GitHub仓库(https://github.com/lvgl/lvgl )下载LVGL源码。 ### 2. 创建Vivado工程 - 打开Vivado,创建一个新的工程,选择对应的Zynq 7020芯片型号。 - 进行Block Design设计,添加Zynq Processing System IP核,配置好时钟、内存等参数。 - 添加显示屏相关的IP核,如Video Out等,并完成连接配置。 - 生成Bitstream文件,导出硬件到SDK。 ### 3. 创建SDK工程 - 打开SDK,导入之前导出的硬件平台。 - 创建一个新的应用工程,选择合适的模板,如“Hello World”。 ### 4. 集成LVGL源码 - 将下载好的LVGL源码复制到SDK工程的src目录下。 - 在SDK的工程属性中,配置头文件搜索路径,包含LVGL的头文件目录。 ### 5. 配置LVGL - 在工程中创建一个LVGL的配置文件,如`lv_conf.h`,根据实际需求进行配置,例如设置显示屏分辨率、颜色模式等。 ```c #define LV_HOR_RES_MAX (800) #define LV_VER_RES_MAX (480) ``` ### 6. 实现显示驱动 - 根据显示屏的类型接口,实现LVGL的显示驱动。一般需要实现`lv_disp_drv_init``lv_disp_flush`等函数。 ```c #include "lvgl/lvgl.h" static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { // 实现显示刷新逻辑 // ... lv_disp_flush_ready(disp_drv); } void lv_port_disp_init(void) { static lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); disp_drv.flush_cb = disp_flush; lv_disp_drv_register(&disp_drv); } ``` ### 7. 初始化LVGL - 在主函数中初始化LVGL显示驱动。 ```c #include "lvgl/lvgl.h" #include "lv_port_disp.h" int main() { // 初始化显示驱动 lv_port_disp_init(); // 初始化LVGL lv_init(); // 创建一个简单的界面 lv_obj_t * label = lv_label_create(lv_scr_act()); lv_label_set_text(label, "Hello, LVGL!"); lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); while(1) { lv_task_handler(); // 延时 usleep(5000); } return 0; } ``` ### 8. 编译下载 - 在SDK中编译工程,确保没有错误。 - 将生成的可执行文件下载到Zynq 7020开发板上运行。 ### 9. 调试优化 - 如果显示不正常,检查硬件连接、驱动实现LVGL配置。 - 根据实际需求对LVGL的性能界面进行优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值