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 ---------------------------------------------------------
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)2) После функций вы создаете таблицу, содержащую все функции, которые вы хотите "поделиться". Обычно эта таблица называется как файл, поэтому я назову своюlocal function f1(...) ... end local function f2(...) ... endextras:Эта запись может показаться странной. Что это такое выполнение-это создание таблицыlocal extras = { f1 = f1, f2 = f2 }extrasС полемf1внутри нее, указывающим на локальную функциюf1. Другими словами, вызовf1(1,2,3)делает то же самое, что вызовextras.f1(1,2,3)3) верните таблицу в конце файла:return extras4) Теперь на
main.luaвы можете использовать функции, определенные на экстрах следующим образом:local extras = require 'extras' extras.f1(1,2,3) extras.f2(4,5,6)Надеюсь, это поможет! Удачи вам!
Comments