Corona SDK - Как мы подключаем внешние функции к main.lua? - PullRequest
2 голосов
/ 11 мая 2011

Прямо сейчас у нас есть весь наш код, собранный в main.lua. Мы не хотим работать с объектно-ориентированным кодом, но все же ищем простой способ разделения различных объектов на отдельные файлы.

В нашем файле main.lua есть такие объекты, как вода, лодка, мальчик, остров и облако - все вместе создают один большой фрагмент кода. Мы хотим иметь «BEGIN WATER 3» в своем собственном файле lua и иметь возможность выполнять этот код в 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 ]

5 голосов
/ 11 мая 2011

Я почти уверен, что вы можете использовать Lua require function в Corona.

Самый простой способ использовать его:

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)

Надеюсь, это поможет! Удачи!

3 голосов
/ 12 мая 2011

В этом другом ответе я постараюсь реализовать то, что, как я думаю, вы хотите. Помните, что я никогда не использовал 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

Привет!

...