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

최근에 받은 트랙백

글 보관함


그동안 이론 공부하고 빌드하고 안드로이드 마켓하고 앱스토어에 업로드하고....
그런것들 다루느라 좀 지루하지 않았나요?

그냥 화면에서 막 움직이는거를 해야 재밌는데요..

그래서 오늘은 코로나의 강력하고 현란한 Physics Engine 에 대해 보겠습니다.


화면과 같이 하늘에서 큰박스, 작은박스, 캔이 마구마구 떨어집니다.
그리고 이게 진짜 실물처럼 서로 부딪히고 튕겨나가고 뭐 그렇게 됩니다.

이걸 표현하는데 단 40줄이면 된다면 여러분 믿으시겠습니까?

이 앱은 코로나에서 제공하는 샘플 앱입니다.
코로나를 까셨다면 Corona SDK 폴더에서 SampleCode-Physics-ManyCrates 폴더로 가세요.

그리고 전체 이미지와 소스를 압축해서 파일첨부도 했습니다. 참고하시구요.

아래가 전체 소스입니다.

--
-- Abstract: ManyCrates sample project
-- Demonstrates simple body construction by generating 100 random physics objects
--
-- Version: 1.1 (revised for Alpha 2)
--
-- Sample code is MIT licensed, see http://developer.anscamobile.com/code/license
-- Copyright (C) 2010 ANSCA Inc. All Rights Reserved.

local physics = require("physics")
physics.start()

display.setStatusBar( display.HiddenStatusBar )

local bkg = display.newImage( "bkg_cor.png" )

local grass = display.newImage("grass.png")
grass.x = 160; grass.y = 430

local grass2 = display.newImage("grass2.png") -- non-physical decorative overlay
grass2.x = 160; grass2.y = 440

physics.addBody( grass, "static", { friction=0.5, bounce=0.3 } )


function newCrate()   
    rand = math.random( 100 )

    if (rand < 60) then
        j = display.newImage("crate.png");
        j.x = 60 + math.random( 160 )
        j.y = -100
        physics.addBody( j, { density=0.9, friction=0.3, bounce=0.3} )
       
    elseif (rand < 80) then
        j = display.newImage("crateB.png");
        j.x = 60 + math.random( 160 )
        j.y = -100
        physics.addBody( j, { density=1.4, friction=0.3, bounce=0.2} )
       
    else
        j = display.newImage("crateC.png");
        j.x = 60 + math.random( 160 )
        j.y = -100
        physics.addBody( j, { density=0.3, friction=0.2, bounce=0.5} )
       
    end   
end

local dropCrates = timer.performWithDelay( 500, newCrate, 100 )

아주 간단하죠?

오늘은 간단히 이 소스를 다루고 다음시간에는 본격적으로 Physics Engine 을 공부해 보도록 할께요.

local physics = require("physics")
Physics Engine을 사용하려면 위와같이 합니다.
자바의 import 와 비슷한 겁니다.

physics.start()
physics를 시작하는 함수입니다.
위에 local physics 라는 이름으로 physics engine을 불러와서 이 physics변수명을 쓰고 점을 찍고 사용할 함수명을 적은 겁니다.

display.setStatusBar( display.HiddenStatusBar )

local bkg = display.newImage( "bkg_cor.png" )

local grass = display.newImage("grass.png")
grass.x = 160; grass.y = 430

local grass2 = display.newImage("grass2.png") -- non-physical decorative overlay
grass2.x = 160; grass2.y = 440

첫번째는 아이폰의 statusbar를 없애는 겁니다.안드로이드폰에서는 필요없는 부분입니다.
코로나는 디폴트로 안드로이드에서는 Full Screen을 적용합니다.
 그 다음 이미지들을 불러오고 그 이미지들에 대한 x,y 좌표를 줍니다.

physics.addBody( grass, "static", { friction=0.5, bounce=0.3 } )
이 부분이 해당 object에 physics를 적용한 겁니다.
grass 이미지 적용했고 이 이미지는 움직이지 않을 겁니다.
그리고 마찰력과 튕기는 값을 각각 0.5, 0.3으로 주었습니다.

그 다음은 랜덤하게 이 이미지들을 불러올 로직이구요.

local dropCrates = timer.performWithDelay( 500, newCrate, 100 )

이것은 타이머를 적용해서 특정 시간 동안 특정회수로 newCrate를 불러온다는 내용입니다.

한번 실행해 보세요. 너무 간단한 코드로 너무 그럴싸한 앱이 완성됐습니다.

오늘은 그냥 간단한 설명으로 끝내는데요.
다음부터 Physics Engine에 대해 본격적으로 파헤쳐 보도록 하겠습니다.


반응형

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

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

Comment

  1. 안녕하세요..
    저두 코로나에 관심이 많아서, 해외 사이트를 자주 찾아 봤는데..
    이렇게 한국어로 된 사이트를 만나서 너무 반갑네요.

    그런데, 블로그의 rss를 구독하려고 했더니.. rss가 나오지 않습니다.
    설정에서 rss를 열어 주실수 없을까요?

    감사합니다.

  2. 안녕하세요? 감사합니다. ^^
    RSS가 뭔지 잘 몰라서.. 한참 검색하다가 관련 글 찾아서 했어요.
    일단 여기 티스토리 환경설정에서 RSS 를 공개글로 했는데요...
    이러면 되나요?