初识 love2d. Hello World & lua 调试 & iOS 环境运行
2016-01-26 23:15
429 查看
废话打头
刚刚用 pygame 完成了flappy bird,静下心来写游戏的感觉太爽根本停不下来。当然主要归功于最近工作比较清闲。PyGame虽然能用到自己喜欢的 python ,写起来也挺顺手,但是致命的缺点是不好移植到 iOS 和 Android. 放眼当下,比较成熟的便于开发 2D 游戏,并且能移植到 iOS 和 android 的游戏引擎,只有最火爆的 cocos2dx 和 unity, 其他的都偏小众。可我不喜欢 cocos2dx ,好不容易下班了还接着用它?简直不要再恶心!我更不喜欢 unity那种托托拽拽!所以就上网找其他游戏引擎,轻量级的,用起来舒服的。找来找去,发现可以选择的不多, love2d 正好是其中一个。
Love2D 采用现在手游卡牌游戏非常时髦的做法,即 C++ 编写出来的主程序,不做游戏逻辑处理,只提供各式各样的底层支持, 所有的游戏逻辑都放到 Lua里。
如果没有下载开源的 引擎, C++ 代码也是改不了的,只能写 Lua 。
love2d 是基于SDL 的2D引擎,并且开源。基于 SDL 意味着较好的可移植性,开源意味能让使用者能比较舒服的看到更多细节。要说起来我的运气也真不错,love2d 在2015年12月份才推出 0.10.0 版本,刚刚官方支持 iOS .比较不愉快的是语言使用的是 lua, 而不是我最近越来越喜欢的 python
我上班一直在用 lua ,所以看到 lua 有点头大。。但是话说回来,自己对 lua 的了解一直停留在比较肤浅的阶段。虽然知道 metatable __index 这些东西,但是自己也从来没有去实现过一个 面向对象的框架。lua 源码就在各个 游戏工程的 liblua 里摆着,自己也未曾看懂过。还有什么协程之类的概念。。 简直让人不知道这东西能派上啥用场。并且对这种自己引用计数自己找机会GC 的语言,一直都有点不太放心,总怕写出什么泄露。。
但不管怎么说。。。Lua 毕竟一直在用用了好久好久。。也算是有点感情,写起基础的逻辑来轻车熟路。所以忍一忍,将就着用吧。考虑到很多非程序员都能玩转 lua ,自己还怕啥呢。
靠谱参考
最官方的参考资料当然是 love2d 官网 https://love2d.org/有下载地址和教程, 里面的 wiki 是官方第一手资料。
参考价值比较大的 网址是这位前辈的博客 http://www.cnblogs.com/xdao/category/417474.html
里面有许多例子,并且还有代码 github 的地址,有代码有资源非常适合学习。
Hello World
我在家的环境是 win7 64位,但是出于某种未知的原因。。。在官方网站上下载的 64位 安装版和 zip 版, love.exe 一运行就挂掉。。但是 32位版本没事。解压完是这样:
里面的 love.exe 就是主程序了,相当于 我们将要编写的 lua 脚本的宿主 exe.
我们可以自己在其他任何目录创建自己的工程,比如我的引擎放在 E:\love2d\love-0.10.--win32 目录,
我自己写的工程 放在 E:\love2d\project\test1目录下。这个目录可以只有 main.lua 文件 。
main.lua 随便写点代码当作 hello world
function love.draw() love.graphics.print('Hello World!', 400, 300) end
这样,就可以在命令行里 ,cd 到 love.exe 引擎的目录,输入love.exe ../project/test1 来运行第一个程序了。
E:\love2d\love-0.10.0-win32>love.exe ../project/test1
lua调试
众所周知 windows 环境下最好的 lua 调试工具是 decoda .下载一个 decoda 安装好。在我们的工程代码目录里创建一个工程,工程目录是这样:
在 decoda 里 按下 F5 开始 Debug. 做这样的设置 :
E:\love2d\love-0.10.0-win32\love.exe 是我们引擎 exe 所在的地方
command 里面,写上我们自己代码的路径 ,注意前面要加上 空格!! 否则命令行 不会认为这个东西是参数。。
我自己的工程路径是 ../project/test1
working 目录不要改,因为那个目录里面有许多 dll 供 love.exe 使用。
打好断点,就可以 enjoy yourself 地调试了。
iOS运行
我自己只测试了在 iOS 模拟器上运行。 iOS 模拟器下运行,需要下载完整的 love2d 代码, 官网上有wiki 说明,按照官网 wiki 说的步骤,下载好之后大概是这样的东西:这个目录下,platform/xcode/ 下面有 love.xcodeproj. 用 xcode 打开, 运行的 target 不要选择 macOS ,而是选择 iOS 那个。
编译 连接完,就能够在 iOS simulator 里 看到 默认的 love2d 的 demo了。
但是我们的目的明显是为了跑自己的游戏, 而不仅仅是看 DEMO 。 我在 wiki 上找了一阵子也没有找到如何做, 无奈只好自己跟 love2d 的源代码。。 最后总结出这样简单的几步:
1. 把自己写好的 游戏工程,比如上面的例子,就是 e:/love2d/project/test1 整个文件夹 拷贝出来(当然 在 mac系统里肯定没有 "e: "这种东西)
2. 压缩这个文件夹里面的所有文件 成 zip
3. 重命名这个 zip 为 test.love。 注意扩展名一定是 ".love" 点 love , 只认这种格式。
4. 在 iOS 工程的 build phases , copy bundle 这个地方,加入 刚才 自己创建好的 test.love ( 原谅我在家只有 windows电脑 没法截图) .
5. 再次运行游戏, 顺利的话就可以看到 我们自己写的游戏啦。
这个压缩脚本,再运行的过程,让我不禁想起了刚上班的时候用 虚幻3引擎。
那个时候的虚幻3 引擎,很大部分的游戏逻辑都是写在 unreal script 脚本里面的。 每次写完脚本,并不像 现在写 lua 那么方便, 而是要运行一个 xxx命令,把写好的所有脚本呢打成一个 脚本包(印象中是好几个脚本包,只要脚本随便改1行,所有脚本都要重新打包,在内存不足的机器上,这个过程甚至要花上1,2分钟的时间 ) 。然后再跑游戏, 刚刚修改的脚本才能够起作用。
现在回头再看 love2d ,如果在 mac 上开发,也要做类似的事。。。
上面说的 1,2,3,4,5 这几步, 可以写个 python 脚本,脚本里 做 删除 老 zip ,压缩新 zip ,命令行形式 启动 xcode 运行,这样应该会更方便些。
总之,如果开发游戏逻辑,肯定是 windows 上使用 decoda 断点调试更爽。
总结
上面所说的几点启示并不复杂,原理也很简单。但是代表我今天看了一整天 love2d 这个引擎的收获,我想在这里记录下来,将来如果哪天不用了忘记了,再回来看的时候,不需要太多时间就能够想起来这些细节,再次上手。
以前我很少排版 博客,这次稍作排版和截图, 也希望能用自己拙劣的表达形式帮助一些比我菜比我了解 love2d 晚的童鞋。
我自己大概扫了几眼教程, love2d 目前给我的印象还是非常不错的。印象里 有一篇教程是讲 love2d shader 的写法的。 好像这个东西的 shader 完全和 GLSL 兼容。 不知道这个 shader 是 SDL 专用的, 还是 由于 SDL 下面采用了一些 OpenGL 渲染,才兼容 GLSL 的。。 具体还需要了解更多的知识才有发言权。
Android 上的发布方法我现在还没有试。我打算最近趁着工作不太忙,写一个完整的 demo 之后,再去看 android 打包。
本来预计看教程写demo 的时间竟然全花在写 博客上了。。趁着时间不晚赶紧去看看。。
相关文章推荐
- 使用lua代码创建文件夹,解压zip文件到指定目录(亲测可用)
- lua io函数
- lua os函数
- lua table函数
- lua重要函数
- Lua string函数说明
- lua 字符串模式匹配
- 为什么 Lua 的新版本越来越慢?
- LUAMD5加密
- LUAMD5加密
- Lua学习笔记(函数)
- lua与游戏测试(二)
- lua 与游戏测试 (一)
- lua的table库中经常使用的函数
- lua之m进制转换为n进制-任意进制转换算法
- quicklua随机数
- 机器学习模型评价(Evaluating Machine Learning Models)-主要概念与陷阱
- Leetcode 150. Evaluate Reverse Polish Notation
- Lua学习笔记-table中的混合风格&多项式求和
- leetcode----Evaluate Reverse Polish Notation