Lua编写iOS程序
2012-10-08 13:42:08 来源:WEB开发网图 1: 我的 Corona 'IDE'
从左至右(反时针方向):Corona模拟器、Emacs的两个窗口(源代码窗口和项目目录窗口)、Corona 终端(输出调试信息)。
想要在物理硬件上运行程序,使用Corona 模拟器的Openfor Build命令。要以iOS编译,你应该提供一个Provisioning Profile(开发或部署)——没错,你并不需要IDP帐号——这两个文件随同app代码和资源一同上传到Ansca公司的服务器上,然后将编译结果返回给你。要以Android编译,你应当有适当的签名证书。然后随着编译过程把你的代码传到Ansca的服务器上。你不必安装AndroidSDK。我没有太深入地研究,但编译后的.apk文件和.app文件已经包含了所有你Lua代码以某种方式处理过的东西。短暂的查看后表明,那不是标准的编译后的Lua字节码,但应该是类似的格式。
Corona事件系统可以处理触摸(包括多点触摸),访问GPS和加速器,处理动画以及自定义事件。它还有一个强大的图形系统,允许你绘制圆、矩形和文本。最近还增加了折线,允许你绘制多边形。你可以显示图片。Corona允许你把这些对象组合在一起然后对他们进行变换。列表4,摘自太阳系模拟器的代码片段,展示了组合多个图形对象的简单例子。其他Corona支持的特性还包括声视频播放,加密算法库,LuaSocket网络库,SQLite存取库LuaSQLite等。还能访问本地组件包括textfield、alert和activityindicator。你还可以用webview做诸如登录屏幕之类的事情,有一个示例程序提供了一个库,可以连接到Facebook。我最近看到有一个游戏(很贵)使用了Box2D物理引擎、角色和一些OpenFeint的功能(类似排行榜)。
列表 4: 太阳系应用代码片段
function new(params)
local color =params.color or planet_colors[random(#planet_colors)]
local radius =params.radius or planetRadius()
local planet =display.newGroup()
planet.theta = 0
local x = params.x -ox
local y = params.y -oy
planet.orbital_radius = sqrt(x*x+y*y)
local body =display.newCircle(x + ox, y + oy, radius, radius)
body:setFillColor(unpack(color))
planet:insert(body,true)
planet.body = body
planet.delta_theta =(40/planet.orbital_radius) * 0.1
return planet
end
把table作为函数参数传递,可以使用命名参数并提供默认值。因此会有 local radius = params.radius orplanetRadius() 这样的写法。
Corona为你做了许多,但同时也有许多不足。最大的问题是对本地控件的访问限制。由于Corona模拟器的限制,它对本地控件的访问是糟糕的。在模拟器中,本地alerts和activityindicators用OSX equivalents实现而不是iOS widgets实现的。textfield、textbox以及web popups在模拟器运行时是不可用的。这在开发时让人痛苦。
最后,除了ANSCA标准以外,无法访问O-CAPI。不仅是大量的标准库,而且第3方库也无法使用,如Three20或 mobileads 这样的APIs。当然,随着Corona Android版本的发布,你可能不想访问OC API因为它限制你的应用程序跨平台的能力(或者增加了复杂性)。最好是通过Lua的CAPI来扩展,就像是许多跨平台的项目一样。
我在ANSCA 小组在他们论坛上的讨论非常有用。随着2.0版本(2010.9)的发布,Corona向每位开发者每年收取249美金。对于游戏版,收费每开发者每年349美金。Ansca公司的网站暗示游戏版的价格只是预览版的。这意味着当正式版发布时价格将会更高。
更多精彩
赞助商链接