Corona SDK - 我们如何将外部函数连接到main.lua?
现在我们将所有的代码收集在main.lua中。我们不想使用面向对象的代码,但仍然可以找到一种简单的方法将不同的对象分割成单独的文件。Corona SDK - 我们如何将外部函数连接到main.lua?
在我们的main.lua文件中,我们拥有诸如水,船,男孩,岛屿和云之类的对象 - 所有这些一起创建了大量的代码。我们希望在它自己的lua文件中包含“BEGIN WATER 3”,并且能够使用简单的函数在main.lua中执行该代码。我们如何做到这一点?
下面的例子我们main.lua文件,显示“water3”:
--------------- BEGIN WATER 3 ---------------------------------------------------------
local watere = display.newImage("water3.png", true)
game:insert(watere)
watere.y = 619
watere.x = 500
watere.xScale = 2
--water sound
local wavesound5 = media.newEventSound("waves.wav")
local function playWave5 (event)
media.playEventSound(wavesound5)
end
local w,h = display.contentWidth, display.contentHeight
local function callbackFunc()
print("Transition 1 completed")
end
local function mainwater(watere)
end
function loopar()
local myTween = transition.to(watere, {time=2300, x=(400), y=(h-140), transition=easing.inOutQuad, onComplete=loopar2})
end
function loopar2()
local myTween = transition.to(watere, {time=2200, x=(w-500), y=(h-120), transition=easing.inOutQuad, onComplete=loopar})
end
local listener2 = function()
print("Transition 2 completed")
end
local myTween = transition.to(watere, {time=2300, x=(w-400), y=(h-140), transition=easing.inOutQuad, onComplete=loopar})
watere:addEventListener("touch", playWave5)
---------------- END WATER 3 ---------------------------------------------------------
在这另一个答案我会尽力实现我认为你想要的。请记住,我从来没有使用过CoronaSDK,所以它可能需要一些调试。
首先,这是一个名为create.lua的文件。你应该把它放在与main.lua相同的目录下。
create.lua
的主要目标是建立一个名为create
的表格。那张桌子只有一个创造水的功能;您可以稍后添加更多功能,例如创建地面。
-- file 'create.lua'
local function water(game,x,y,xScale,imagePath,soundPath)
local image = display.newImage(imagePath)
game:insert(image)
image.x, image.y, image.xScale = x, y, xScale
local w,h = display.contentWidth, display.contentHeight
-- create two empty local variables and assign functions to them
local loopar, loopar2
loopar = function() transition.to(image, {time=2300, x=(400), y=(h-140), transition=easing.inOutQuad, onComplete=loopar2}) end
loopar2 = function() transition.to(image, {time=2200, x=(w-500), y=(h-120), transition=easing.inOutQuad, onComplete=loopar}) end
-- start the movement
transition.to(image, {time=2300, x=(w-400), y=(h-140), transition=easing.inOutQuad, onComplete=loopar})
local sound = media.newEventSound(soundPath)
image:addEventListener("touch", function() media.playEventSound(sound) end)
end
local create = { water = water }
return create
里面main.lua,为了能够首先使用create.water你必须得到访问该create
表;你使用require
。像这样:
-- file 'main.lua'
local create = require 'create'
<put the code for creating the 'game' group here>
create.water(game, 619, 500, 2, "water3.png", "waves.wav")
请注意,create.water接收参数。您现在可以更容易地更改参数:
create.water(game, 200, 100, 2, "water3.png", "waves.wav") -- other initial coordinates
create.water(game, 619, 500, 1, "water3.png", "waves.wav") -- scaleX = 1
create.water(game, 619, 500, 1, "water.png", "waves.wav") -- other water img
Regards!
我敢肯定,你可以使用Lua的require功能电晕。
使用它的最简单方法如下:
1)你只要你想创建的文件中尽可能多的本地函数(我们称之为extra.lua)
local function f1(...)
...
end
local function f2(...)
...
end
2)后这些函数可以创建一个包含所有要“共享”的函数的表格。这是常见的是表被称为像文件,所以我会打电话给我的extras
:
local extras = {
f1 = f1,
f2 = f2
}
这个符号似乎不可思议。它所做的是创建一个名为extras
的表,其中包含一个名为f1
的字段,指向本地函数f1
。换句话说,调用f1(1,2,3)
确实与调用extras.f1(1,2,3)
3)返回表在文件的结尾:
return extras
4)现在对main.lua
您可以使用这样的演员中定义的函数:
local extras = require 'extras'
extras.f1(1,2,3)
extras.f2(4,5,6)
我希望这有助于!祝你好运!
此方法似乎在没有模块(...,package.seeall)的情况下工作。目前我在模块中使用了这个声明,但我听说这是不好的做法。 – jhocking 2011-05-12 01:25:41
@jhocking这是一个不好的做法。模块函数将在下一个版本的Lua中被弃用。 – kikito 2011-05-12 07:47:30
这不是一个问题。 – jhocking 2011-05-12 11:31:03