나중에 주석을 달아서 48줄보다는 좀 더 길어졌네요. ㅋ

코로나(Corona SDK)의 가장 큰 장점은 고성능의 물리엔진입니다. 게다가 사용법도 간단하고 쉽죠.
다양한 물리 시뮬레이션 및 게임을 구현해 보세요. (-:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
-- 물리엔진 시작
local physics = require "physics"
physics.start()

-- 중심축을 좌상단으로 설정
display.setDefault( "anchorX", 0 ); display.setDefault( "anchorY", 0 )

-- 바닥 생성 함수
local createBottom = function(_parent)
    local bottomImg = display.newImage(_parent, "images/scene1_bottom.png", 0, 0)
   
    local imageOutline = graphics.newOutline( 1, "images/scene1_bottom_outline.png" )
    physics.addBody(bottomImg, "static", {friction=0, outline=imageOutline})
   
    bottomImg.width, bottomImg.height = bottomImg.width * 0.5, bottomImg.height * 0.5
   
    bottomImg.y = display.actualContentHeight - bottomImg.height
   
    return bottomImg
end

-- 흰색 배경 생성(기본이 검정이므로)
local bg = display.newRect( 0, 0, display.actualContentWidth, display.actualContentHeight)
bg:setFillColor(1, 1, 1, 1)

-- 바닥 그룹
local g = display.newGroup()

for i = 1, 50 do
    local _btm = createBottom(g)
    _btm.x = (i - 1) * _btm.width - 80
    g:insert(_btm)
end

-- 주인공 생성
local player  = display.newCircle(g, 50, 50, 25)
player:setFillColor(0, 0, 0, 0)
physics.addBody(player, "dynamic", {friction = 0, radius=24})

local bird = display.newImage(g, "images/bird.png", 0, 0)

local function on_Touch(e)
    player:applyForce(3, 0, player.x, player.y + (player.height * 0.5) )
end
Runtime:addEventListener("touch", on_Touch)

local function on_E(e)
    player:applyForce(0.12, 0, player.x, player.y + (player.height * 0.5) )
   
    player.rotation = 0
    g.x = -player.x + (player.width * 0.5) + 80
    bird.x, bird.y = player.x - 10, player.y - 10
end
Runtime:addEventListener("enterFrame", on_E)