반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 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.28
Physics Bodies  (0) 2011.09.27
Physics의 Collision Event  (0) 2011.09.27
Corona SDK Physics API  (1) 2011.09.22
config.lua 파일과 build.lua 파일...  (2) 2011.09.19
코로나 프로그래밍 기본 규칙...  (0) 2011.09.15
폰트 및 config.lua 파일에 대하여.  (10) 2011.09.14
처음으로 코딩 해 보기  (2) 2011.09.13