brunch

You can make anything
by writing

C.S.Lewis

by 원강민 Oct 07. 2015

48줄 코드로 만든 게임 프로토타입

주석을 달아서 좀 더 길어졌네요. =_=

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


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


-- 물리엔진 시작
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)

(내용 복사가 안되쥬? 드루와유 - http://wonhada.com/?p=1266)

매거진의 이전글 웹에 있는 텍스트 데이터 로드하기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari