반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함



Posted on . Written by



9. Pre-create Physics Bodies



만약 여러분 시나리오에서 여러 physics body 들을 사용하려고 한다면 그 physics body 들을 non-time-critical code 에서 미리 생성해 두는 것이 좋습니다. 어딘가 스크린 밖에 inactive 상태로 두던가 invisible display group 으로 두었다가 필요하면 active 상태로 바꾸면 되거든요.

그냥 physics body 들 몇개를 time-critical code 내에서 생성하는게 그다지 큰 문제가 되지는 않습니다 단지 한 game 사이클에서 10~20 개의 physics body 들을 한꺼번에 생성하는 것을 피하기 위해서입니다. 이렇게 한꺼번에 생성하면 인식할 수 있을 정도로 frame rate 이 skip 이 일어날 겁니다.

그리고 이 방법은 어떤 면에서는 balancing act 라고 얘기할 수도 있습니다. 200개의 physics body 들을 사전에 생성해서 deactivate 시키게 되면 Box2D 세계에서 이것들을 remove하게 됩니다. 하지만 Corona의 메모리에서 remove되는 것은 아닙니다. 그래서 이렇게 극단적으로 많이 사용할 경우에는 그렇게 효과가 크지 않을 수도 있습니다.


10. Utilize Audio “Best Practices”



앱에서 사용하는 음향효과는 항상 non-time-critical code 에서 pre-load 되어야 합니다. 예를 들어 scene 이나 level 이 시작(begins) 되기 전에 말이죠. 또한 이러한 사운드들을 사용 가능한한 범위 내에서 용량을 최대한 줄여야 합니다. 11khz mono (not stereo)는 대부분의 경우에 acceptable 합니다. 유저가 폰이나 태블릿 스피커 혹은 여러 이어폰을 통해서 들을 수 있는 범위에 속하죠. 그리고 간단하게 그리고  WAV 같은 cross-platform 포맷을 사용하세요. 그래서 CPU를 너무 무리하게 일을 시키지 마세요.

그리고 음향효과들은 아래처럼 테이블로 관리하기를 권장합니다. 쉽게 참조할 수 있고 더 이상 필요 없으면 쉽게 처분할 수 있도록 말이죠.



--load these sounds during NON-time-critical code
local soundTable = {
   mySound1 = audio.loadSound( "a.wav" ),
   mySound2 = audio.loadSound( "b.wav" ),
   mySound3 = audio.loadSound( "c.wav" ),
   mySound4 = audio.loadSound( "d.wav" ),
   mySound5 = audio.loadSound( "e.wav" ),
   mySound6 = audio.loadSound( "f.wav" ),
   mySound7 = audio.loadSound( "g.wav" ),
   mySound8 = audio.loadSound( "h.wav" ),
}


위와 같은 구조라면은 playback 은 다음과 같이 간단하게 사용하실 수 있습니다.


local mySound = audio.play( soundTable["mySound1"] )


항상 그렇듯이 특정 음향효과가 더이상 필요하지 않다면 깨끗하게 정리하는 걸 잊지 마세요. 그리고 이 테이블에서도 reference를 깨끗하게 처리하세요.


local ST = soundTable
for s,v in pairs(ST) do
   audio.dispose( ST[s] ) ; ST[s] = nil
end


여기까지가 퍼포먼스 최적화와 관련된 내용입니다. 개발자로서 이 퍼포먼스 최적화(performance optimization) 은 끝없이 꾸준히 해야 될 일입니다. 그리고 항상 best practice를 해야 합니다. 아무쪼록 이 글에서 다룬 몇가지 팁들이 여러분 앱의 퍼포먼스를 boosting 시키는데 조금이라도 도움이 됐으면 합니다. 질문이나 댓글은 언제든지 환영합니다.



이로써 퍼포먼스 최적화 관련 글을 4번에 걸쳐 다 한글로 옮겨 놨습니다.

항상 코딩하면서 적용해보고 적용해보고 이렇게 반복 연습해서 몸에 익혀 둬야할 내용들 같습니다.


반응형

Comment

  1. 다소 생소 하지만 잘보고 갑니다.