现在我们将所有代码收集在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 ---------------------------------------------------------
答案 0 :(得分:5)
我很确定你可以在Corona中使用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)
我希望这有帮助!祝你好运!
答案 1 :(得分: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
问候!