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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

FAQ Wednesday #6

2012. 5. 25. 10:23 | Posted by 솔웅


반응형
FAQ Wednesday #6

Posted by

또 다른 FAQ를 다룰 수요일 입니다. 아래 5개의 질문과 답변이 있습니다.

Question 1

어떻게 Corona window를 데스크탑으로 다시 가지고 올 수 있죠?

Answer

윈도우 시스템을 사용할 때 발생할 수 있는 일입니다. 만약 external display 를 사용하고 있는데 프로그램이 display 없이 restart 했을 경우에 일어나죠. 프로그램이 hang 된 것이 아닙니다. 그냥 존재하지 않는 display에 표시하려고 하는 겁니다. Corona Windows Simulator에서 일어날 수 있습니다. (맥에서는 발생하지 않습니다.) 아래 윈도우로 다시 되돌릴 수 있는 방법이 있습니다.

- task bar에 있는 Corona Simulator tab에서 오른쪽 마우스를 누릅니다.
- move 를 클릭합니다.
- 화살펴 키를 누르세요.
- 없어진 window 가 display 에 보일 때까지 옮겨 주세요.
- move를 stop 하려면 Left click을 하세요.


이렇게 하시면 됩니다. 나중에는 윈도우에서 이런 상황이 발생하지 않도록 만들어지기를 바랍니다.

Question 2

Game Center에 제 최고 점수를 세팅했는데 없어졌어요. 왜죠?

Answer

최고점수를 세팅하거나 Achievement를 unlocking 하는 것을 Game Center 서버를 통해 전파하는데는 시간이 좀 걸립니다. 이 의미는 set 된 다음에 곧바로 새 점수나 achievement가 보이지 않는다는 얘기죠. gameNetwork.show API를 사용해서 새로운 정보를 return 받는데는 24시간 정도 걸릴 수 있다는 것을 예전에도 알려드린 바 있습니다. 최고 점수나 achievement unlock 을 하고 gameNetwork.request를 사용해서 loadScore 나 loadAchievement를 하는 것은 몇시간이 걸리지는 않습니다. 그냥 몇초 정도 걸릴겁니다. 단지 그것이 세팅되고 난 후 곧바로 그 정보가 count 되지는 않습니다. 곧바로 display 되어야 한다면 그 정보는 local에 저장되는것이 맞습니다.


Question 3

제 앱은 GameCenter에 대해 gameNetwork.init API를 사용합니다. Game center 로그인창을 띄우기 위해서죠. 유저가 로그인을 하지 않고 Cancel을 누를경우 제 앱에서는 이 후에 유저에게 다시는 sign in 하라는 메세지를 띄우지 않습니다. 이 Sign-in dialog 창(로그인 창)을 어떻게 하면 다시 띄울 수 있죠?

Answer

만약 유저가 게임센터 로그인창에서 Cancel을 누른다면 게임센터 initCallBall 은 event.data = false 라는 값을 return 할 겁니다. 로그인이 실패했다는 것을 알리는 것이죠. 유저기 앱에서 force quit 을 하지 않는 이상 혹은 native iOS Game Center 앱을 사용해서 다시 로그인을 하지 않는 이상 이 로그인 창을 다시 불러오는 방법은 없습니다. Note: false status를 받은 이후에 gameNetwork.init을 부르면 로그인 창이 다시 뜨지 않습니다.

성공적으로 로그인 하거나 앱이 resume 되고 유저가 계속 Game Center에 로그인 된 상태에서 initCallback은 event.data = true를 return 합니다. 이 true status를 받은 이후에 여러분의 앱은 다른 gameNetwork API를 call 해야 합니다.

이 behavior는 Corona에만 해당 되는 것은 아닙니다. Game Center의 흐름이 그렇습니다. 그리고 로그인 창이 다시 뜨지 않는것이 맞다고 생각합니다. 유저가 cancel을 했다는 것은 그 앱에서 Game Center를 사용하고 싶어하지 않는 다는 의미이기 때문입니다.

Question 4

왜 나는 안드로이드 디바이스에서 어떤 파일들은 access 할 수 없죠?

Answer

Corona에서 File access는 OS 에 근거해서 작동합니다. platform에 의존하는 것이죠. iOS 디바이스에서는 여러분은 Resource directory(main.lua 가 있는 곳)에서 file들을 access 할 수 있습니다. 그리고 Documents와 Temporary directory에서도 접근할 수 있습니다. 안드로이드에서는 Resource directory 접근에 제한이 있습니다. 왜냐하면 그건 실제 디렉토리가 아니기 때문이죠. 파일들은 zip 파일로 enclose 됩니다. 코로나는 audio와 image API를 사용해서 이미지와 오디오를 직접 로딩할 수 있도록 합니다. 하지만 file I/O API를 이용해서 Resource 파일에 접근하는데는 제한이 있습니다. 이 때문에 안드로이드에서는 Resource directory 나 그 subdirectory에 있는 파일에 접근하기 위해 Lua File System(LFS)를 사용할 수 없습니다. 안드로이드에서 Document와 Temporary directory에있는 파일과 서브디렉토리 접근은 가능합니다.

디렉토리를 생성하고 없애기 위해 LFS를 사용할 때 유념해야 할 부분들이 있습니다. 첫번째로 파일이다 디렉토리에 접근할 때 full path string을 사용하셔야 합니다. (system.pathForFile을 이용해서) 그리고 lfs.chdir이나 lfs.currentDir API를 사용하시면 안됩니다. 현재의 디렉토리 개념은 platform 별로 다릅니다.

Resource Directory는 platform 에 의존하는 것이죠. 이 디렉토리 안에 파일이나 서브디렉토리를 만들거나 작성할 수 없습니다.

Corona 파일 접근은 플랫폼의 파일 시스템 sandbox에 따라 제한을 받습니다. sandbox 는 OS와 다른 앱의 파일들로부터 독립적인 그 앱의 공간을 위한 제한을 둡니다.

서브디렉토리를 add 하는 것은 여러분 app 개발 하는데 필요할 겁니다. 하지만 거기에는 제한사항들이 있다는 것 (위에서 언급한 안드로이드 제한 등) 그리고 어떤 기능은 미래의 플랫폼에서는 implement 되지 않을 수도 있다는 것을 염두에 두셔야 합니다. 거기에 대한 대비책은 여러분의 파일이나 디렉토리를 최대한 simple하게 유지하셔서 미래의 변화에도 영향이 없도록 하는 방법이 있을 겁니다.

LFS는 Daily Build #2012.805 부터 implement 됐습니다. 좀 더 많은 정보는 여기를 보세요.

Question 5

어떻게 audoi stream 파일을 처음부터 restart 할 수 있죠?

Answer

Audio stream (audio.loadStream으로 audio를 로드 한 것)은 항상 남은 부분부터 play 합니다. 만약 다시 streaming 할 필요가 있으시면 audio.rewind나 audio.seek(0) 을 이용해서 오디오를 처음부터 다시 시작하도록 하실 수 있습니다.

여기까지가 오늘의 questions 입니다. 즐겁고 유익한 시간이 되셨기를 바랍니다.

반응형