오랜만에 코로나 튜토리얼을 번역해 봅니다.
거르지 않고 꼬박꼬박 해 오다가 이번 TDD 프로젝트에 참여하면서 두달넘게 공부를 하지 못했네요.
오랫동안 모바일 앱을 만들지 못했는데... 이제 모바일 앱 하나 만들고 싶습니다.
----------------------------------------------------
Loading Scene-Specific Sounds
Storyboard 와 함께 오디오를 사용할 때 만날 수 있는 어려움들에는 아래와 같은 것들이 있습니다.
• 해당 scene의 main chunk에서 사운드를 로딩하면 문제가 발생할 수 있습니다.왜냐하면 reload를 하려면 scene을 remove 한 다음에 recreate을 시켜야 하기 때문이죠.
• createScene 이벤트는 scene이 로드될 때마다 로드될 필요가 없습니다. 그리고 큰 사운드가 로드되면 transition이 delay 되게 될 겁니다.
• enterScene 이벤트는 매번 fire 됩니다. 하지만 스크린에 해당 scene이 완전히 로드되기 이전에는 사운드가 로드되지 않는다는 특징이 있습니다.
위의 enterScene과 exitScene은 한 쌍으로 발생됩니다. enterScene은 scene-specific sound를 로드할 최적의 장소일 것입니다. 그리고 나서 exitScene 이벤트에서 audio.dispose()를 사용해서 그것들을 처리하면 됩니다. (이 때 객체를 nil 처리하는 것을 잊지 마세요.)
그런데 만약에 앱이 새로운 scene으로 갈 때 sound 가 갑자기 끊기지 않고 계속 play 되어야 하는 상황이면 어떨까요? 다음 scene에서는 이 audio handle에 접근할 수 있는 방법이 더 이상 없습니다. 이 문제점을 해결 하려면 sfx테이블로 sound 를 로딩하시면 됩니다. 그리고 onComplete phase에서 anonymous 함수를 사용해서 dispose 시키면 됩니다.
아래 코드를 보세요.
local sfx = require( "sfx" ) -- forward declare the handle sfx.longsound = nil function scene:createScene( event ) local group = self.view local background = display.newRect( 0, 0, display.contentWidth, display.contentHeight ) background.x = display.contentCenterX background.y = display.contentCenterY group:insert( background ) local function leaveScene(event) if ( event.phase == "ended" ) then storyboard.gotoScene( "b" ) end end local button = display.newRect( 100,100,100,100 ) group:insert( button ) button:setFillColor( 255,0,255 ) button:addEventListener( "touch", leaveScene ) end function scene:enterScene( event ) sfx.longsound = audio.loadSound("audio/mirv_missiles_online.wav")audio.play( sfx.longsound, { onComplete = function()
audio.dispose( sfx.longsound )
end } )
end
루아에서는 onComplete 이벤트가 call 할 수 있는 anonymous 함수를 사용할 수 있도록 제공합니다. 여러분은 이 메소드를 오디오 파일이 끝났을 때 dispose 하도록 할 때 사용하실 수 있습니다. sound 가 실제로 사용되기 전에 sfx table에서 sound handle 하도록 미리 선언해둬야 한다는 것을 잊지 마세요.
여러분은 모듈에서 오디오를 처리하는 것의 장점을 아실 겁니다. 특히 Storyboard나 다른 scene manager utility를 사용할 때 말이죠. 오디오는 조심스럽게 그리고 제대로 관리 되어야 한다는 사실을 명심 하셔야 합니다. 물론 그 오디오 파일을 dispose 시키는 것도 말이죠. 그렇게 함으로서 메모리 누수를 방지하고 다른 이상한 문제점들을 방지할 수 있습니다.
'Corona SDK > Corona Doc' 카테고리의 다른 글
Tutorial: Extending Libraries Without Native Code - 2/2 - (1) | 2013.07.07 |
---|---|
Tutorial: Extending Libraries Without Native Code - 1/2 - (0) | 2013.07.07 |
화면 전환시 오디오 파일 다루기 (0) | 2013.06.10 |
퍼포먼스 최적화(Performance Optimizations) 팁들 소개 -04- (1) | 2013.03.15 |
퍼포먼스 최적화(Performance Optimizations) 팁들 소개 -03- (0) | 2013.03.14 |
퍼포먼스 최적화(Performance Optimizations) 팁들 소개 -02- (0) | 2013.03.13 |
퍼포먼스 최적화(Performance Optimizations) 팁들 소개 -01- (0) | 2013.03.12 |
Physics 트릭들 배우기 - Wind Tunnel- (0) | 2013.02.27 |
Physics 트릭들 배우기 - Sticky Projectiles- (0) | 2013.02.27 |
Physics 트릭들 배우기 - Can I Jump?- (0) | 2013.02.25 |
iOS Build-in 트위터 기능 사용하기 (0) | 2013.02.20 |