Corona SDK - как мы подключаем внешние функции к main.Луа?



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

В нашем основном.lua файл у нас есть объекты, такие как вода, лодка, мальчик, остров и облако - все вместе, создавая один массивный бит кода. Мы хотим иметь "BEGIN WATER 3" в своем собственном файле lua и иметь возможность выполнять этот код в main.lua с простой функцией вместо этого. Как мы это делаем это?

Вот пример из нашего основного.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 ---------------------------------------------------------
211   2  

2 ответов:

На этот другой ответ я попытаюсь реализовать то, что, как мне кажется, вы хотите. Имейте в виду, что я никогда не использовал CoronaSDK, поэтому он может нуждаться в некоторой отладке.

Во-первых, вот файл под названием create.Луа . Вы должны поместить его в тот же каталог, что и main.Луа.

Основная задача 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

Внутри главного.Луа, по порядку чтобы иметь возможность использовать create.вода сначала вы должны получить доступ к этой таблице 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(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

С уважением!

Я почти уверен, что вы можете использовать функцию Lua require в 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)

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

    Ничего не найдено.

Добавить ответ:
Отменить.