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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

'Corona SDK/Corona Doc'에 해당되는 글 113

  1. 2011.09.15 코로나 프로그래밍 기본 규칙...
  2. 2011.09.14 폰트 및 config.lua 파일에 대하여. 10
  3. 2011.09.13 처음으로 코딩 해 보기 2


반응형
글을 진행하다 보니까 코로나에서 제공하는 DOC 내용대로 가게 되네요.
코로나에서 제공되다보니까 기본을 탄탄히 닦을 수 있는 것 같아요.

저도 지금 앱을 개발하고는 있지만 이 글을 쓰면서 기본을 다질 수 있어서 좋구요.

아마 코로나에서 제공하는 매뉴얼 대로 글이 연재 될 것 같습니다.
가끔 제가 터득한 팁 정도 올릴 수 있을 거구요.

코로나는 lua 랭귀지를 사용하고 있습니다.
lua는 JAVA,C 같은 컴파일 언어가 아니고 PHP, ASP, Java Script 같은 스크립트 언어입니다.

변수명은 숫자로은 시작할 수 없구요. 첫글자 이외에는 사용할 수 있습니다.
숫자 이외에 문자, underscore 를 변수명에 사용 할 수 있어요.

코로나에서 미리 점유하고 있어 변수명으로 사용할 수 없는 단어들은 아래와 같습니다.
    and       break     do        else      elseif
end       false     for       function  if
     in        local     nil       not       or
     repeat    return    then      true      until     while

라인 주석은 앞에 -- 를 붙입니다.. (대쉬 2개)
범위 주석은


--[[
print( 10 )       -- no action (comment)
--]]
이렇게 합니다.
일시적으로 범위 주석을 해제하고 싶으면 아래와 같이 합니다.

---[[
print( 10 )       --> 10
--]]
루아에서 사용하는 형( TYPE) 에는 아래와 같은 것들이 있습니다.

nil
. Nil is a type with a single value, nil. By default, global variables are nil which means that they have not been assigned a value. This is analogous to null in JavaScript/ActionScript.
  • boolean. The boolean type has two values, false and true. Note that in conditional expressions, e.g. if ( condition ), both false and nil evaluate as false; everything else evaluates as true.
  • number. Represents real (double-precision floating-point) numbers.
  • string. Represents arrays of characters (any 8-bit character, including embedded zeroes)
  • function.
  • table. Tables are the fundamental data structure in Lua. They implement an associative array which is just a fancy way of saying that the array can be indexed not just by numbers, but also by any other value of the language except nil. Typically, you would use a string as an index (see Properties).
자바스크립트의 null 은 루아의 nil 과 같구요. 배열은 table이란 이름을 사용합니다.
변수 선언 할 때 따로 형을 선언하지 않구요 루아가 알아서 해 줍니다.
형변환도 루아가 알아서 해 주구요.
이런 규칙이 편하긴 하지만 프로그래밍을 하다보면 일단 스트링으로 선언된 숫자를 number 형 처럼 크기 비교 같은 거 할 때 좀 불편한 점은 있더라구요.
이건 나중에 한번 다룰 일이 있을 겁니다.

루아에서 배열로 사용하는 table 선언은 {} 로 합니다.
아래 사용 예제 입니다.
        t = {}                          -- create a table
        k = "x"
        t[k] = 3.14                     -- new table entry, with key="x" and value=3.14
        t[10] = "hi"            -- new table entry, with key=10 and value="hi"
        print( t[k] )           --> 3.14
        print( t["x"] )         --> 3.14
        print( t.x )            --> 3.14
        k=10
        print( t[k] )           --> "hi"
변수 선언은 그냥 하시면 되요.
abc  = "test"
이러면 abc 라는 변수에 test 라는 문자가 들어갑니다.
이렇게 선언하면 글로벌 변수가 되구요.

지역 변수는 앞에 local 이라는 단어를 씁니다.
x = 1                                                   -- global variable
local y = 10                                    -- local variable
관계를 나타내는 기호들은 아래와 같습니다.
==    ~=    <     >     <=    >=
그리고 logical operator 는 아래와 같구요.
     10 or 20            --> 10
     10 or error()       --> 10
     nil or "a"          --> "a"
     nil and 10          --> nil
     false and error()   --> false
     false and nil       --> false
     false or nil        --> nil
     10 and 20           --> 20
그리고 두 단어를 합하려면 .. 를 씁니다.
예를 들어
print("test = " .. x)
이렇게 하면 터미널에 test = 'x 변수의 내용' 이 찍혀 나옵니다.
오퍼레이터 우선순위는 낮은 순서부터 아래와 같이 됩니다.
     or
     and
     >     <     >=    <=    ~=    ==
     ..
     +     -
     *     /     %
     not   #     - (unary)
     ^
코로나에서 메소드(펑션) 선언은 아래와 같습니다.
function abc()
함수 내용
end
그리고 미리 지정된 함수들도 사용할 수 있구요.
math.sin(100)
미리 지정된 함수들은 다음에 소개해 드릴 겁니다.
object method 를 사용하려면 : 를 사용합니다.
자바스크립트는 그냥 . 을 사용하지요. 이 부분이 좀 다르더라구요.
JavaScript Lua
object.translate( 10, 10 ); object:translate( 10, 10 )
자바스크립트 처럼 . 을 사용해도 되는데요 그 방법은 아래와 같습니다.
Object call with dot Object call with colon
object.translate( object, 10, 10 ); object:translate( 10, 10 )
편하신 대로 사용하면 되는데.. : 가 조금 더 편하죠?
메모리 관리는 루아가 알아서 해 줍니다.
자바처럼 garbage collection 에서 처리합니다.
루아는 local 로 선언된 내용들을 처리할 겁니다.
그러니까 변수나 함수 선언은 웬만하면 local로 하시는 게 좋습니다.

global 변수나 table 에 들어있는 변수들은 Garbage로 처리 되지 않아서 계속 메모리를 점유하고 있게 됩다
그리고 팁으로 알아 두실 건
자바에서는 모든 라인 끝에 ; 를 붙입니다.
루아는 붙여도 되고 아무것도 안 붙여도 됩니다.
if 문도 자바랑 약간 다른데요.
if () then
end
이런 구조를 갖고 있습니다.
그리고 elseif 는 붙여 씁니다.
배열에서 첫번째 배열은 t[1]입니다. 자바처럼 0에서 부터 시작하지 않습니다.
루아에서는 함수 리턴 값이 2개 이상 될 수도 있습니다.
이 부분은 편리하더라구요.
그리고 이렇게 변수값 대입도 가능합니다.
x,y=y,x
이러면 x 는 y 가 되고 y 는 x 가 됩니다.
x,y,z = 0
이러면 세개 변수 값이 한꺼번에 대입 되구요.
오늘은 이렇게 루아에 대한 문법 공부를 간단히 했습니다.
그냥 한번 읽으면 '아 루아는 다른 언어와는 다르게 이런 특징이 있구나' 하는 걸 알 수 있을겁니다.
그냥 거기까지만 하면 되지 않을까요?
그럼 다음 시간에 또 뵙겠습니다.


반응형

'Corona SDK > Corona Doc' 카테고리의 다른 글

Physics Joints 예제 코드  (0) 2011.09.29
Physics Joint  (0) 2011.09.28
Physics Bodies 코딩 하기  (5) 2011.09.28
Physics Bodies  (0) 2011.09.27
Physics의 Collision Event  (0) 2011.09.27
Corona SDK Physics API  (1) 2011.09.22
정말 매력있는 코로나의 Physics Engine  (2) 2011.09.21
config.lua 파일과 build.lua 파일...  (2) 2011.09.19
폰트 및 config.lua 파일에 대하여.  (10) 2011.09.14
처음으로 코딩 해 보기  (2) 2011.09.13


반응형
우선 어제 했던 코드에 이어서 할까요?
진도 나가기 전에 소개해 드릴 것은.
코로나는 메모장에서부터 이클립스나 Xcode 같은 개발툴 등에서 개발 할 수 있습니다.

코로나에서 추천하는 에디터가 윈도우즈하고 맥에 각각 한개씩 있더라구요.
맥 - TextWrangler http://www.barebones.com/products/textwrangler/download.html
윈도우즈 - Notepad ++  http://notepad-plus-plus.org/

관심 있는 분들은 다운 받아서 사용해 보세요.
어제 전체 코드는 아래와 같습니다.

print( "Hello World" )

local textObject = display.newText( "Hello World!", 50, 50, nil, 24 )
textObject:setTextColor( 255,255,255 )

local button = display.newImage( "endinggreen.png" )
button.x = display.contentWidth / 2
button.y = display.contentHeight - 200

function button:tap( event )
        local r = math.random( 0, 255 )
        local g = math.random( 0, 255 )
        local b = math.random( 0, 255 )
 
        textObject:setTextColor( r, g, b )
        media.playEventSound( "pop2_wav.wav" )
end
button:addEventListener( "tap", button )

endinggreen.png 하고 pop2_wav.wav 파일은 여러분에 맞게 사용하시면 됩니다.

이번엔 폰트를 바꿔 볼까요?
"Zapfino" 라는 폰트가 있나본데요.
local textObject = display.newText( "Hello World!", 50, 50, nil, 24 )  를
local textObject = display.newText( "Hello World!", 50, 50, "Zapfino", 24 ) 로 바꿔보세요.


폰트가 바뀌었습니다.

그리고 아래코드를 한번 추가해 보세요.
textObject.rotation = 30;


그러면 글자가 기울어져서 나오죠?

이젠 아래 그림처럼 에뮬레이터에서 Window-View as 를 선택하시고 iPad 를 선택하세요.
윈도우즈 사용하시는 분들은 애플 디바이스 에뮬레이터가 없을 테니까 다른 태블릿을 선택하세요.


그럼 그림과 같이 에뮬 화면이 아이패드가 돼요.
그런데 화면이 커지는 바람에 글자나 그림 크기나 위치가 이상하게 변했죠?

이런 현상을 막기 위한 것이 config.lua 파일 입니다.
모든 기기에서 제대로 의도한 화면이 나오게 하는거죠.

이 config.lua 소스는 여러분이 받을 코로나 파일이 있는 폴더에 있습니다.
SampleCode-GettingStarted-HelloWorld 폴더로 가면 코로나가 제공하는 샘플 코드들이 있구요. 거기에 config.lua 파일이 있습니다.

이것을 그냥 지금 작업하는 폴더에 복사해 넣겠습니다.
그리고 나서 에뮬에서 다시 불러온 후 태블릿 디바이스로 바꿔 보세요.


자 이젠 화면이 제대로 나오죠?
그러면 config.lua 의 내용을 볼까요?

-- config.lua
application =
{
    content =
    {
        width = 320,
        height = 480,
        scale = "letterbox" -- zoom to fill screen, possibly cropping edges
    },
}

어플리케이션을 기본으로 아이폰 해상도인 320 - 480 으로 맞춥니다.
그리고 scale 은 letterbox 로 놓습니다.
그러면 해상도가 640 960인 아이폰4나 768 - 1024 인 아이패드에서 제대로 보입니다.

또 안드로이드 해상도인 320-480, 480-800, 480-854,600-1024 등에서도 잘 보입니다.
갤럭시 탭인 600-1024 까지는 시뮬레이터에서 화면을 제공해 주는데
그 이상인 드로이드 줌이나 갤럭시 탭 10.1 에서는 아직 테스트를 못 해 봤습니다.

아마 거기서도 잘 나오겠죠?

config.lua 에 대해서는 나중에 더 자세히 살펴 볼 기회가 있을 겁니다.

그럼 다음 시간에 다시 뵐께요.

Tip - 코로나에서 변수를 선언 할 때는 웬만하면 local로 선언하세요.
         메모리 관리에 훨씬 유리합니다.
반응형

'Corona SDK > Corona Doc' 카테고리의 다른 글

Physics Joints 예제 코드  (0) 2011.09.29
Physics Joint  (0) 2011.09.28
Physics Bodies 코딩 하기  (5) 2011.09.28
Physics Bodies  (0) 2011.09.27
Physics의 Collision Event  (0) 2011.09.27
Corona SDK Physics API  (1) 2011.09.22
정말 매력있는 코로나의 Physics Engine  (2) 2011.09.21
config.lua 파일과 build.lua 파일...  (2) 2011.09.19
코로나 프로그래밍 기본 규칙...  (0) 2011.09.15
처음으로 코딩 해 보기  (2) 2011.09.13

처음으로 코딩 해 보기

2011. 9. 13. 07:16 | Posted by 솔웅


반응형
이제 Corona SDK 를 설치 하셨으면 코딩을 한번 해 볼까요?

코로나 개발 도구는 아무 에디터나 쓰면 됩니다.

윈도우 경우 메모장부터 워드패드, MS-Word 그리고 울트라 에디터, 아크로 에디터 등 아무거나 쓰면 되요.
또한  이클립스나 인텔리제이 아이디어 같은 개발 툴을 사용해도 됩니다.
이 개발 툴 들은 따로 뭔가 환경을 설정해야 되요.
그 환경 설정 방법은 기회되면 한번 다루겠습니다.

매킨토시도 마찬가지구요. 에디터나 워드 또는 XCODE 같은 개발 툴을 사용하시면 됩니다.

일단 기본 규칙은요.

1. 파일 확장자가 .lua 라야 한다.
2. 첫번째 시작하는 파일명은 main 이라야 한다.
    => 고로 첫번째 파일명은 main.lua 라야 합니다.
3. 저장 경로는 아무데나 해도 된다.

일단 여러분 에디터를 여세요. (저는 맥이라서  XCODE에 하겠습니다.)

그리고 파일명을 main.lua 라고 하세요.

이제 코딩을 하죠.
처음으로 터미널 화면에 "Hello World" 를 찍어 보도록 하겠습니다.

이렇게 입력하세요.
print( "Hello World" )
저장을 하시구요.
코로나 폴더로 가서 Corona Terminal 을 실행하세요.
아마 윈도우에서는 Corona Simulator를 실행하시고 Debugger를 실행하셔야 할 겁니다.

아래 그림처럼 Open a Project 를 클릭해서 저장해 두신 main.lua를 오픈합니다.


그러면 터미널 화면에 입력하신 글이 찍히실 거예요.



그럼 이번엔 에뮬레이터에 찍히게 할까요?

main.lua에 아래처럼 입력해 보세요.
local textObject = display.newText( "Hello World!", 50, 50, nil, 24 )
textObject:setTextColor( 255,255,255 )
main.lua를 저장하시고 에뮬에서 다시 불러와 보세요. (XCODE에서는 저장하면 자동으로 에뮬 화면이 갱신 되더라구요.) 그러면 에뮬레이터 화면에 Hello World가 찍혀 있을 겁니다.

위 그림 오른쪽 아래가 main.lua이고 그 위가 터미널 화면이고 왼쪽이 아이폰 에뮬레이터 예요. 그럼 이번에는 이미지를 불러 올까요? 우선 사용할 이미지를 아래와 같이 main.lua가 있는 폴더에 복사해 넣으세요.

저는 지금 만들고 있는 앱에 쓰이는 endinggreen.png를 사용하겠습니다. 그리고 아래와 같이 코드를 입력하세요.
local button = display.newImage( "button.png" )
button.x = display.contentWidth / 2
button.y = display.contentHeight - 50
저장한 후 에뮬에서 실행해 보시면 아래와 같이나올 거예요.

자 그럼 이미지를 버튼으로 만들고 그 버튼을 누르면 글자 색이 변하도록 할까요? 우선 이미지의 변수가 button 으로 선언 돼 있죠? 여기에다가 리스너를 달아주면 됩니다.
button:addEventListener( "tap", button )
이 의미는 button에 리스너를 달아주는데 tap 이벤트가 일어나면 button 이라는 함수를 실행한다는 의미입니다. 그러면 이제 button 이라는 함수를 만들어야 겠죠? 코로나에서 함수선언은 이렇게 합니다.
function 이름 -- 내용 end
이런 식 입니다.
그러면 tap 이벤트에 반응하는 button 함수를 만들겠습니다.
function button:tap( event )
end
이 함수 안에 원하는 걸 넣으면 됩니다. 우선 랜덤하게 RGB 값을 설정하도록 하죠.
function button:tap( event ) local r = math.random( 0, 255 ) local g = math.random( 0, 255 ) local b = math.random( 0, 255 ) end


이렇게 하시면 됩니다. 이 설정된 RGB 값을 저 위에 선언했던 텍스트에 적용 시키는 것만 넣으면 됩니다. 이 경우에는 setTextColor() 함수를 쓰면 됩니다.
선언했던 텍스트 변수 이름이 textObject 였습니다. 그래서 아래처럼 해야 되겠죠? textObject:setTextColor( r, g, b )
함수 전체를 보면 이렇게 됩니다.
function button:tap( event ) local r = math.random( 0, 255 ) local g = math.random( 0, 255 ) local b = math.random( 0, 255 ) textObject:setTextColor( r, g, b ) end
그러면 main.lua 파일에 아래 코드를 추가해 보세요. function button:tap( event ) local r = math.random( 0, 255 ) local g = math.random( 0, 255 ) local b = math.random( 0, 255 ) textObject:setTextColor( r, g, b ) end button:addEventListener( "tap", button )
저장 후 실행 해 보세요.

이제 이미지를 누르면 글자 색이 변하게 됩니다. 그러면 이제 버튼을 누르면 글자 색이 변하면서 소리가 나도록 할까요? 그러면 button:tap 함수 안에 소리가 나도록 하는 코딩을 하면 될겁니다.
우선 main.lua 가 있는 폴더에 사운드 파일을 복사해 넣으세요. 저는 pop2_wab.wav 파일을 사용하겠습니다.

이제 button:tap(event) 함수 안에 아래와 같이 코딩해 넣으세요. media.playEventSound( "pop2_wav.wav" )
저장 후 실행 해 보세요.

이제 이미지를 클릭하면 글자 색이 바뀌면서 소리도 날 거예요. 오늘 여러분은 첫번째 코로나 앱으로 화면에 텍스트,이미지 뿌리기와 이벤트 리스너 달기 등을 배웠습니다.
정리하면
1. 터미널 화면에 글자 뿌리기. (에러 체크할 때 유용함) 2. 디바이스 화면에 글자 뿌리기. 3. 글자에 색 넣기 4. 글자 위치 조정하기 5. 디바이스 화면에 이미지 뿌리기. 6. 이미지 위치 조정하기 7. display.contentWidth, display.contentHeight 사용하기 8. 이미지에 리스너 달기 9. 리스너 이벤트 발생시 처리하는 함수 만들기 10 랜덤 함수 math.random 사용하기.
11. 사운드 파일 사용하기
대충 이정도를 배웠습니다. 글자나 이미지 위치도 조정해 보시고 coronasdk.com 에 가셔서 오늘 사용한 함수 API 를 살펴보시면 훨씬 도움이 될겁니다.
그럼 다음 시간에 계속 이어가도록 하겠습니다.
반응형

'Corona SDK > Corona Doc' 카테고리의 다른 글

Physics Joints 예제 코드  (0) 2011.09.29
Physics Joint  (0) 2011.09.28
Physics Bodies 코딩 하기  (5) 2011.09.28
Physics Bodies  (0) 2011.09.27
Physics의 Collision Event  (0) 2011.09.27
Corona SDK Physics API  (1) 2011.09.22
정말 매력있는 코로나의 Physics Engine  (2) 2011.09.21
config.lua 파일과 build.lua 파일...  (2) 2011.09.19
코로나 프로그래밍 기본 규칙...  (0) 2011.09.15
폰트 및 config.lua 파일에 대하여.  (10) 2011.09.14