2011-05-11 4 views
2

지금 우리는 모든 코드를 main.lua에 모았습니다. 우리는 객체 지향 코드로 작업하고 싶지 않지만 다른 객체를 분리 된 파일로 쉽게 분할 할 수 있습니다.Corona SDK - 외부 기능을 main.lua에 어떻게 연결합니까?

main.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 --------------------------------------------------------- 

답변

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 테이블에 접근해야 할 첫 번째 create.water을 사용할 수 있도록; 당신은 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 

감사합니다!

+0

이 메서드는 맨 위에 모듈 (..., package.seeall)없이 작동하는 것으로 보입니다. 현재 모듈에서이 문장을 사용하지만 나쁜 습관이라고 들었습니다. – jhocking

+0

@jhocking 나쁜 습관입니다. 모듈 함수는 다음 Lua 버전에서 사용되지 않을 것이다. – kikito

+0

그건 질문이 아닙니다. – jhocking

5

는 당신이 코로나에 루아의 require 기능을 사용할 수 있습니다 확신 해요. 당신이 원하는대로 당신은 파일 내부에 많은 지역 함수를 만들

1) (의이 extra.lua)

local function f1(...) 
    ... 
end 

local function f2(...) 
    ... 
end 

2) 후에 부르 자 :

사용하는 가장 간단한 방법은 다음이다 기능을 사용하려면 "공유"하려는 모든 기능을 가진 테이블을 작성하십시오. 그것은 그 표는 파일처럼라는 것이 일반적이다, 그래서 나는 나의에게 extras 전화 할게 :

local extras = { 
    f1 = f1, 
    f2 = f2 
} 

이 표기법은 이상하게 보일 수 있습니다. 그 일을하고 이라는 테이블을 만들고 그 안에 f1이라는 필드를두고 로컬 함수 f1을 가리킨다. 이 같은 엑스트라에 정의 된 기능을 사용할 수 있습니다 main.lua에서 지금)

return extras 

4 : 즉, f1(1,2,3) 호출하면 파일의 끝에 테이블을 반환)

3 extras.f1(1,2,3)를 호출하는 것과 동일한 않습니다 :

local extras = require 'extras' 

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

이 정보가 도움이되기를 바랍니다. 행운을 빕니다!

+0

감사합니다. 수동으로 각각의 함수를 호출 할 필요없이 "water3"과 같은 모든 함수를 포함하는 하나의 주요 함수를 생성 할 수 있습니까? – sandra

+0

죄송합니다, 나는 "덮음"이 무슨 뜻인지 이해하지 못합니다 – kikito

+0

모으는 것이 무슨 뜻인지 더 좋은 단어입니다! – sandra

관련 문제