2014-07-22 2 views
0

레벨 1로 나를 가리키는 main.lua가 있습니다. 레벨 2로 이동하는 onCollision 기능이 있지만 레벨 2로 이동하면 모든 것이로드됩니다. 물리 엔진을 제외하고는 괜찮습니다. 콘솔에 ERROR : physics.start()가 호출되지 않은 오류가 발생합니다. 그러나 level2.lua의 상단에 난 선언 :Corona SDK 오류 : physics.start()가 호출되지 않았습니다.

:

function scene:hide(event) 
    local sceneGroup = self.view 
    local phase = event.phase 
    if event.phase == "will" then 
     -- Called when the scene is on screen and is about to move off screen 
     physics.stop() 
    elseif phase == "did" then 
     -- Called when the scene is now off screen 
    end 
end 
function scene:destroy(event) 
    -- Called prior to the removal of scene's "view" (sceneGroup) 
    local sceneGroup = self.view 
    package.loaded[physics] = nil 
    physics = nil 
end 

내 level2.lua의 시작은 이것이다 :

local physics = require("physics") 
physics.start() 

이 내 level1.lua 파일의 끝입니다

-----------------------------------------------------------------------------------   
-- 
-- level2.lua 
-- 
--------------------------------------------------------------------------------------- 

local composer = require("composer") 
local scene = composer.newScene() 

-- include Corona's "physics" library 
local physics = require ("physics") 
physics.start() 

-- forward declarations and other locals 
local screenW, screenH, halfW, halfH = display.contentWidth, display.contentHeight,  display.contentWidth*0.5, display.contentHeight*0.5 
local centerY, centerX = display.contentCenterY, display.contentCenterX 

물리학이 아주 명확하게 시작 되었는데도 왜이 오류가 발생합니까? level1.lua에서 level2.lua로 똑같은 코드를 복사하려고 시도했지만 여전히 동일한 결과를 얻었습니다.

+1

씬 : create (event) 함수로 physics.start()를 이동하십시오. –

+0

나는 그것을 시도했지만 작동하지 않는다. 나는 여전히 같은 오류 메시지를 받는다. – user3036519

+1

그것은 많은 일이 될 수 있습니다. 물리층 모듈을 사용하는 청취자가 이전 장면에서 제대로 종료/제거하지 않는 경우? 그런 식으로 다른 장면에서 물리학을 제거하면 청취자가 물리를하지 않아도 오류가 발생할 수 있습니다. 그러나 오류가 많은 장소에있을 수 있으므로 제공된 코드에서 아무 것도 찾을 수 없습니다. –

답변

1

내 장면에 콜리 전 리스너가 있습니다. create function.

function onCollision(event) 
    if(event.object1.myName == "name" and event.object2.myName == "name") then 
     timer.performWithDelay(3000, nextLevel, 1) 
     return true 
    end 
end 

나는이 기능은 물리 패키지를 호출에 보관하고 내가

physics.stop() 

라고했기 때문에 나는 다음 단계로 진행 할 때 오류를 반환 내가 이벤트 리스너를 제거하여 그것을 해결하기 위해 관리 생각 함수의 4 번째 줄에 :

function onCollision(event) 
    if(event.object1.myName == "ball" and event.object2.myName == "finThree") then 
     timer.performWithDelay(3000, nextLevel, 1) 
       Runtime:removeEventListener("collision", onCollision) -- I remove the eventListener here. 
     return true 
    end 
end 

이전과 같은 오류 메시지가 표시되지만 문제가 해결 된 것 같습니다. 나는 이것이 모든 사람들을위한 해결책이되지는 않을 것이라는 것을 알고 있지만, 그것은 나를 위해 일했고 희망적으로 그것은 나 같은 문제를 겪고있는 다른 사람들을 위해 일할 것이다.

나를 도와 주신 Frozire에게 감사드립니다.

2

메인 청크에서 실행할 것으로 예상되는 퍼팅 코드는 모듈이 처음로드 될 때만 실행됩니다. 나중에 장면을 다시 입력하고 장면을 취소하지 않은 경우.

Bodies를 추가 할 수 있도록 scene : create()에서 physics.start()를 수행해야합니다. 그러나 장면이로드 될 때까지 상호 작용을 시작하기를 원하지는 않습니다. 나는 scene에서 physics.start()를 호출한다 : create()는 즉시 physics.pause()로 멈춘다. 그런 다음 내 장면에서 : show()의 단계가 끝나면 physics.start()를 다시 호출하여 상호 작용을 시작합니다. 이렇게하면 장면을 다시 만들지 않고도 장면을 다시 입력 할 수 있고 물리학이 시작됩니다.