您的位置:首页 > 编程语言 > Lua

初识 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 的时间竟然全花在写 博客上了。。趁着时间不晚赶紧去看看。。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: