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

최근에 받은 트랙백

글 보관함

Corona SDK 수요일의 FAQ

2012. 4. 21. 09:12 | Posted by 솔웅


지난주부터 코로나에서는 새로운 블로그 코너를 만들었습니다.


매주 Corona SDK 웹사이트의 포럼이나 댓글에 달린 질문 중에 자주 질문되는 것 몇가지를 골라서  답을 주는 그런 코너입니다.


지난주 수요일에는 5가지가 올라와 있는데요.


저나 여러분한테도 도움이 될 것 같아 이렇게 번역해서 글을 올립니다.


====== o ==== o ==== o =====


FAQ Wednesday  

Posted by Tom Newman

이 블로그 포스트는 새로운 시리즈인데요. 매주 수요일 코로나 댓글이나 포럼등에서 자주 나오는 질문들 (FAQ)을 모아서 이에 대한 답을 올리려고 합니다. 그 질문들은 코로나를 사용하고 계신분들도 있고 아니면 처음 접하시는 분들도 계실 겁니다.

이제 시작하겠습니다.






Question 1

코로나 시뮬레이터를 돌릴 때 코로나 터미널에 print 메세지를 볼 수가 있는데요. Xcode iOS 시뮬레이터나 iOS 디바이스에서 돌릴 때는 print로 찍은 메세지를 볼 수 없습니다. 뭐가 잘못 된 것일까요?

Answer

만약 Xcode를 사용해서 앱을 로드하거나 iOS 디바이스를 테스트 한다면 Xcode 콘솔에서 print 메세지가 display 될 겁니다. Xcode iOS 시뮬레이터를 사용하고 계신다면 Mac의 콘솔앱을 start 하시면 그 메세지를 보실 수 있을 겁니다. 만약 안드로이드 디바이스를 테스트 하신다면 안드로이드 SDK를 다운받아서 adb logcat을 사용하셔야 print 메세지를 보실 수 있습니다.

Tip: 만약 print 메세지를 즉각즉각 확인하시지 못하신다면 main.lua 파일 맨 위에 아래 코드를 붙여 주세요.
io.output():setvbuf('no')


Question 2


display object의 x,y 위치를 세팅하는게 헛갈립니다. 제가 생성할 때의 값이 생성된 이후에도 똑 같은 건가요?

Answer


대부분의 객체들이 x,y 포지션으로 위치를 정의하면 top-left 를 기준으로 위치를 잡습니다 그리고 생성된 다음에는 객체의 중심으로 바꿉니다. 예외 적인 경우는 display.newCircle, display.newLine, display.newGroup 입니다. display.newCircle 객체는 원의 중심을 기준으로 생성됩니다. 그리고 display.newLine은 start와 end 포인트를 사용합니다. display.newGroup은 top-left 포인트를 기준으로 생성되고 생성 된 이후에도 x,y 레퍼런스 포인트가 바뀌지 않습니다. 다른 모든 display object 들은 생성되고 나서 center 기준점을 사용합니다. 이 말은 display 객체의 x,y  파라미터를 변경한다면 그 객체는 객체의 중심을 기준으로 해서 움직일 거라는 겁니다. object:setReferencePoint API 생성 후에 어떤 기준점을 사용할 것인지 정할 수 있도록 해 줍니다.

이런 혼란을 피하기 위해서 프로그래머들은 객체를 처음 생성할 때 (top-left 가 기준일 때) 0,0을 만들어 놓고 나서 생성된 후에 그 객체의 x,y 값을 세팅해 줍니다. 이렇게 하면 그 객체의 x,y 포지션은 (별도로 reference point를 변경하지 않는 이상) center를 기준으로 삼게 된다는 얘기입니다.


Question 3


멀티플 터치 객체들을 사용할 때, 스크린에서 그 객체들이 겹쳐질 때 touch 이벤트가 사용되는 것을 볼 때가 있습니다. 이런 경우 어떻게 stop 시켜야 하죠?

Answer

터치 리스너를 call 하게 되면 그 터치가 일어난 곳의 최상위 객체 (top-most object) 에 그 이벤트가 전달 됩니다. 만약 리스너가 true를 리턴한다면 그 event dispatcher는 그 touch event를 stop 시킬 겁니다. 만약에 리스너가 false를 return 하면 dispatcher는 터치된 위치에 있는 그  다음 객체의 touch listener를 볼겁니다. 이러한 작업은 계속 그 밑으로 밑으로 똑 같이 적용 됩니다. 리스너가 true를 return 할 때까지요. 일반적인 실수로는 return 값을 아예 주지 않는 경우인데요. 그렇게 되면 디폴트로 false가 return 됩니다. 그러니까 그 이벤트를 밑의 object에도 적용시키지 않으려면 항상 이벤트 리스너 마지막 줄에 return true를 해 주셔야 합니다.

Question 4

I’m getting build errors saying the code signing was wrong or invalid entitlements. What can cause this?
빌드할 때 code signing 이 틀리거나 invalid 하다고 나옵니다. 왜 그럴까요?

Answer

빌드할 때 에러가 난다면 코드의 syntax 에러는 아닙니다. build.settings를 지우고 한번 빌드를 해 보세요 그래도 에러가 나는지요. build.settings file이 없을 때 에러가 나지 않으면 build.setting 파일쪽이 문제가 있는 겁니다. 그리고 코로나의 샘플 앱을 한번 빌드 해 보세요. (Hello World 같은...) 그러면 여러분의 프로젝트에 문제가 있는지 없는지 알 수 있을 겁니다. 애플리케이션 이름(폴더 이름)을 test 같은 간단한 이름으로 한번 해 보세요. 그럼 애플리케이션 이름에서 문제가 있는지 없는지 알 수가 있을 겁니다.

Question 5

서브디렉토리에 있는 저의 Lua 코드를 로드하기 위해 require를 사용 합니다. 그리고 코로나 시뮬레이터에서는 잘 돌아 갑니다. 그런데 이것을 제 디바이스에서 돌리면 충돌이 일어납니다. 코로나에서는 서브디렉토리로부터 코드를 로딩하는 것을 지원하나요?

Answer

예 서브디렉토리안에 Lua 코드를 만드실 수 있습니다. 하지만 주의하셔야 할 부분이 있습니다. 코로나 시뮬레이터와 디바이스 사이에는 약간 다른 부분이 있습니다. 첫번째로 require 구문에 있는 파일 이름은 실제 파일 이름이어야 합니다. 일반적인 에러는 실제 파일 이름은 testlib 인데 그 구문에서는 require("Testlib") 이라고 하면 에러가 납니다. 코로나 시뮬레이터에서는 둘 다 작동을 하지만 디바이스에서는 작동하지 않을 겁니다.

두번째로는 subdirectory를 어떻게 표기 했는가 입니다. 맞는 표기는 . 을 사용하는 겁니다. 만약 여러분의 라이브러리 파일이 test.lua 이고 그것이 library 서브디렉토리에 있다면 test = require("library.test") 라고 해야 합니다.

코로나 시뮬레이터에서는 디렉토리 구분자로 . (마침표) 뿐만 아니라 / (슬래시)도 허용합니다. 하지만 디바이스에서는 / 를 사용하면 에러가 날 겁니다. 디바이스에서는 항상 구분자로 . 을 사용해야 합니다. 그러므로 루아 파일의 이름에는 . 가 들어갈 수 없습니다.

한가지 더 말씀 드리자면, 가끔 require 구문을 괄호 없이 사용하는 경우가 있습니다. 이것은 오직 한개의 함수 파라미터만 존재하고 그것이 스트링이거나 테이블일 경우에만 허용됩니다. 그래서 위에 썼던 예제를 이 형식으로 사용한다면 test = require "library.test" 가 될 겁니다.


여기까지가 오늘의 FAQ 입니다. 오늘의 FAQ를 통해서 뭔가 새로운 것을 배우셨기를 바랍니다. 만약 질문이 있으시면 forum들에 올려 주세요. 아니면 댓글에 올려 주시던가요. 여기에 짧게 댓글을 다셔도 됩니다. 하지만 되도록 forum 을 이용해 주실것을 부탁드립니다.

반응형

Comment