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

现在我们的所有代码都集中在main.lua中。我们不想使用面向对象的代码,但仍然希望将不同的对象拆分为单独的文件。

在我们的main.lua文件中,我们有水、船、男孩、岛和云等对象 - 所有这些都创建了一个大的代码块。我们希望将“BEGIN WATER 3”放在自己的lua文件中,并能够通过一个简单的函数在main.lua中执行该代码。怎么做呢?

这里是我们main.lua文件的一个示例,显示“water3”:

原文链接 https://stackoverflow.com/questions/5966811

点赞
stackoverflow用户312586
stackoverflow用户312586

我很确定你可以在 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 中,你可以像这样使用在 extras 中定义的函数:

local extras = require 'extras'

extras.f1(1, 2, 3)
extras.f2(4, 5, 6)

希望这可以帮助你!祝你好运!

2011-05-11 16:06:57
stackoverflow用户312586
stackoverflow用户312586

在此回答中,我会尝试实现您想要的功能。请记住我从未使用过CoronaSDK,所以可能需要一些调试。

首先,这里有一个名为create.lua的文件。您应该将其放在与main.lua相同的目录中。

create.lua的主要目标是构建一个名为create的表。该表仅具有一个用于创建水的函数;您可以稍后添加更多函数,例如用于创建地面。

-- 文件 '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

  -- 创建两个空局部变量,并将函数分配给它们
  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

  -- 开始移动
  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来实现。像这样:

-- 文件 'main.lua'

local create = require 'create'

<在此处放置创建'game'组的代码>

create.water(game, 619, 500, 2, "water3.png", "waves.wav")

请注意,create.water接收参数。现在您可以更轻松地更改参数:

create.water(game, 200, 100, 2, "water3.png", "waves.wav") -- 其他初始坐标
create.water(game, 619, 500, 1, "water3.png", "waves.wav") -- scaleX = 1
create.water(game, 619, 500, 1, "water.png", "waves.wav") -- 其他水图像

问候!

2011-05-11 21:35:31