Corona SDK - 我们如何将外部函数连接到main.lua?

时间:2011-05-11 15:32:33

标签: function mobile lua corona

现在我们将所有代码收集在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 ---------------------------------------------------------

2 个答案:

答案 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

问候!