지난 번 글을 쓴지 3주나 지났군요. 자기가 쓴 코드도 며칠만 지나면 뭐가 뭔지 너무 오래 되서 이전에 어디까지 공부했는지도 잘 모르겠습니다.
지난번 글 대충 읽어 봤더니 chainFunctions() 함수를 분석하면 될 것 같습니다.
이 함수에 전달되는 파라미터를 보겠습니다.
function chainFunctions(exec,options,runParent,noanim)
exec,options,runParent,noanim 이렇게 4개의 파라미터들이 전달 됩니다.
이 함수를 call 하는 anim 함수에서 이 함수가 call 되는 부분을 보죠.
return chainFunctions(function () return transition.to(obj,options) end, options,runParent)
첫번째 exec 에 해당 되는 부분은 function () return transition.to(obj,options) end 라는 함수 입니다. 여기서 obj,option 은 지난 번 글에 서 다뤘죠.
obj는 흰공의 위치이고 options는 빨간점의 위치값입니다.
그러니까 chainFunction 의 첫번째 인자는 흰공이 options 에 설정된 위치까지 움직이는 겁니다.
두번째 파라미터는 뭘까요? options입니다. 이 options는 빨간공의 위치이죠? 흰공이 빨간공으로 움직이면 그 다음은 그 빨간공 자리에 흰공이 있게 되니까 그 위치가 흰공의 위치값이 될 겁니다. 아마 그걸 다루려고 이 options 값을 전달하는 것 같습니다.
코드를 분석 해 보면 나오겠죠.
세번째 값인 runParent 는 뭘까요? anim() 함수에서도 runParent를 던져주긴 하는데 이제 main 함수에서 call 됐을 때는 전달받지 못한 겁니다.
그럼 뭘까요?
anim() 함수가 main 함수에서만 call 되는 건 아닙니다. chainFunction() 함수 안에서도 이 anim() 함수가 호출되는데요.
return anim(arg[1],arg[2],run) 라는 부분이 있습니다.
여기에 세번째 파라미터가 있죠?
이건 chinFunction() 내부를 분석하면 뭔지 알 수 있을 겁니다.
그리고 chainFunction() 에는 네번째 파라미터가 noanim 이라고 있는데 anim() 함수에서 호출 될 때는 이 값이 없습니다.
자세히 보니까 chainFunction() 함수 내에서 자기 자신인 chainFunction()을 호출하는 부분이 있습니다.
return chainFunctions(arg[1],{},run,true)
이 4번째 파라미터는 true 이군요.
이것도 chainFunctions() 함수 내부 로직을 분석하면 어떻게 사용되는지 알 수 있을 것 같습니다.
들어가기 전에 이 소스를 만든 개발자가 적어 놓은 주석부터 한번 보겠습니다.
각 파라미터 (parameters, arguments) 들에 대한 설명을 달아 줬네요.
-- args
-- exec - is the current function to execute. It is assumed to be a function that runs a Corona SDK transition
exec는 현재 실행되는 함수이다. 이 값은 Corona SDK transition이 실행되는 함수가 전해질 것이다.
--
options - options for the animation (see Corona SDK). These are assumed
to be the same closed over by the exec call - chainFunctions relies on
being able to manipulate them for "onComplete" and "whenDone" to work
options 는 animation을 위한 것이다. (Corona SDK)를 보세요. 이것들은 chainFunctions에서 exec에 의해 실행 된 다음에 onComplete과 whenDone 이 됐을 때 생성되게 되는 것들이 될 것이다.
--
# Additional feature: if options.delete==true the subject of the
animation will be deleted (obj:removeSelf() called) when the animation
completes
# 추가 기능들 : 만약 options.delete 가 true 이면 애니메이션이 완료 되면 그 애니메이션 되는 대상은 delete 될 것이다. (obj:removeSelf() 가 call 됨으로서).
--
runParent (optional) - run the previous function in the chain. It takes
a single function as an argument. chainFunction creates this function
itself
runParent(옵션)은 chain에 있는 이전 함수를 실행한다. argument로 single function을 갖는다. chainFunction 이 이 함수를 생성한다.
-- noanim (optional) - true if exec does not represent a function executing a Corona SDK transition. If true, the only valid call to the chain is "start"
noanim(옵션) - true. 만약 exec 가 Corona SDK 의 transition을 실행하지 않을 때 이 값은 true 가 될 것이다. 그러면 여기서 start 함수만 call 될 것이다.
이렇게 친절하게 주석을 달아 주었네요.
이 주석만 봐도 대충 이 함수의 로직이 이해가 됩니다.
main 함수에서 설정했던 빨간공의 위치들이 돌아가면서 options 가 되서 흰공이 이 빨간공 위치로 계속 이동할 것이고 더이상 빨간공의 위치가 없으면 noamin이 true 가 되서 start 함수가 호출되서 끝나는 거군요.
오늘은 여기까지 하구요.
다음 글에서 제대로 chainFunctions() 부분을 분석해 보도록 하겠습니다.
'Corona SDK > 샘플 코드 분석' 카테고리의 다른 글
animation chain 소스 분석 해 보기 02 (0) | 2013.07.22 |
---|---|
animation chain 소스 분석 해 보기 01 (0) | 2013.07.15 |
코로나로 뱀 기어디니는 효과 내기 (0) | 2012.02.28 |
간단하게 눈발 흩날리는 느낌 주기 (2) | 2012.02.16 |
돈 넣고 돈 먹기(야바위) 모바일 게임 만들기 2 (11) | 2012.01.04 |
돈 넣고 돈 먹기(야바위) 모바일 게임 만들기 1 (2) | 2012.01.03 |
내가 그린 선으로 떨어지는 공 받아내기 (2) | 2011.12.31 |
Corona SDK 화면전환 API (Story Board) (4) | 2011.12.23 |
Level 별 Lock 기능 걸고 푸는 법 (0) | 2011.12.15 |
벽돌 깨기 게임 만들기 -3 (1) | 2011.12.01 |