大家好,这里是太郎。
我个人使用LOVE2D这个框架开发自己的游戏有了相当一段时间,出于一些问题我无法在本文章中说明自己的项目具体内容。出于好奇我在机核搜索了LOVE2D的相关文章发现并没有类似的教程或者引导性内容,所以打算写一些开发教学文章用以贡献我的绵薄之力。
本篇文章为2D游戏开发框架LOVE2D教程的序言,用于对什么样的开发者可以尝试使用此引擎(应该说是框架,为了方便理解,将在本文以及本系列文章中使用引擎一词),引擎本身的优劣和面向的开发对象,为什么使用LOVE2D而不是Unity或者Godot,与此引擎类似的开发环境等问题进行说明。
LOVE2D适合什么样的开发者
LOVE2D作为一个以为2D游戏开发方向为目标而设计的引擎,非常适合有一定平面设计能力的开发者。运行此框架所需要的脚本语言lua本身非常简单,我个人认为是所有编程语言中最适合入门的语言,再加上LuaJIT在LOVE2D中的集成,运行效率一般不会出现什么问题。
你会需要一些基础的工业动画制作中的概念,比如关键帧,图层,叠加方式等。同时你也需要一些现代游戏开发中的基础概念,比如着色器,内存,线程,状态机等等。
以上这些能力是我个人作为一个计算机系的学生和MAD/PV动态图形动画制作者时获得的。本系列文章会逐步尽可能详细的讲清楚这些概念和这些概念在此框架中的应用。
在你有着以上知识的同时且善用shadertoy的情况下你可以做出相当不错的画面效果。
同时,我非常推荐尝试进行开发或者学习的朋友使用Adobe After Effect作为LOVE2D开发的替代可视化开发工具,所以同时有着After Effect使用经验的朋友可以在此系列文章中更轻松的进行学习。
我会将AE中图层的概念转为Object在开发中使用
引擎本身的优劣和面向的开发对象
LOVE2D本身使用Lua作为编程脚本语言,一定程度上Lua的优劣就是LOVE2D这个开发工具自身的优劣。
Lua的优势是学习成本相当低,即使你没有进行过编程工作,你也可以通过一些在线脚本运行工具来对Lua进行学习。同时Lua的数据类型也很少,table非常强大,甚至初级开发者可以不考虑全局变量和局部变量的概念进行开发和内存管理的学习。如果你使用Windows可以直接在Microsoft store下载Lua来进行尝试运行和学习。
劣势则是不同于大部分编程语言中Array的概念,Lua中的Array也就是table是以1作为开始而不是0,初次使用Lua的其他语言开发者会对此有一些不适。同时因为全局变量的本质是在G_table放一个key为变量名的值,所以理论上每次变量读取都需要一次hashmap开销。当然作为独立游戏开发者,除非是你需要在一帧中进行高达数万乃至百万次的变量读取,否则一般不会有什么性能问题。
在游戏开发中,你不需要知道一门语言所有的功能,往往你只需要学习if else,loop,array以及加减乘除就足够你进行游戏开发了。我会在后面的文章中引导并且进行教学。
LOVE2D在设计之初只是作为面向2D游戏开发的开发工具。并不适合任何需要引入3D模型的游戏开发。当然目前LOVE2D有了一些第三方库可以使得LOVE2D在一定程度上进行3D模型的渲染和游戏开发的可能,但是我个人还是不推荐使用LOVE2D进行3D游戏开发。
同时LOVE2D并不适合任何大型商业游戏或者移动端商业游戏的开发。LOVE2D本身缺少web接口所以并不适合多次付费而是更适合买断制游戏。
为什么使用LOVE2D而不是Unity或者Godot
LOVE2D与这两者最大的区别是并不带有可视化开发工具,他们的设计思路更趋向于面向对象编程,创建一个对象之后然后将脚本组件进行附加,让这些对象在场景对象内进行交互。
但是我个人认为面对对象编程并不适合于初级开发者,开发面对对象编程项目的设计思路与初级开发者进行编程知识学习时的设计思路是不同的。面对对象编程项目更倾向于思考如何设计对象和对象的交互方式,而在你使用LOVE2D或者raylib这种类图形库框架开发环境时你可以使用任何你需要的编程思路,而初级开发者比较适合的面向过程编程也可以包含在其中。
面向过程编程更符合初级开发者在进行编程学习时,代码自上而下进行运行最后得到结果的这个流程。面对对象编程更适合中高级开发者在进行大型商业项目开发时进行功能拓展。任何编程思路都有其存在意义,不分高下。
除了开发设计思路相对更自由一些,LOVE2D的在作为一个2D游戏开发工具的功能相当齐全但是并不冗余,所以初级开发者的学习成本也相对要低很多,也更容易触及2D游戏开发的本质——通过读取用户的输入让计算机将对应的图案显示在屏幕对应的位置上。
与此引擎类似的开发环境
除了LOVE2D,我也推荐raylib这个框架。raylib使用C作为开发语言,对于内存管理和读写效率肯定是比Lua要强的多的。同时raylib也官方支持3D模型的导入和动画的播放。当然因为是C所以易用性和学习难度对于初级开发者来说也是相对较难的,不过对于我这种在大学期间就用tiva-tm4c123gh6pm拿ARM汇编当开发语言重写雅达利游戏的人来说就无所谓了。
如果你想知道其他更多引擎或者开发工具的信息你可以看dragonflydb的数据来进行挑选。
结语
我应该会从今天开始更新文章,从如何在LOVE2D框架中如何显示一张图片开始讲我目前会的开发知识。学到了新东西之后便会再分享出来。如果我的文章中出现了对于初级开发者不太好理解的词汇,请善用Chatgpt和搜索引擎。