반응형
회사 커피숍 스마트 테이블에 있던 게임을 얼핏 보고 생각이 들었던건 "와 게임 만들기 쉽겠다." Corona를 한번 접하고 부터는 간단한 게임은 대충 머릿속에 그려졌다. 물론 난 게임 개발자가 아니여서 3D 게임 같은거나 복잡한 것에 대한 개발은 전혀~ 생각이 떠오르질 않는다.
일단 많은 사람들에게 "만들기가 이렇게 쉬워요!" 라고 말해주고 싶다.
기본 적인 게임 로직은 아주 간단하다. 노란 공이 통통 튀고 구멍난 곳을 피해서 빨간공을 먹으면 된다.
코드도 나름 간단하다. 공과 벽을 만들고 물리성질을 부여한다. 그리고 전체 화면의 왼쪽이냐 오른쪽이냐에 따라서 공의 x축 왼쪽방향 또는 오른쪽으로 힘을 약간 준다.
여기서 삽질한 것이 Object:applyForce()그냥 힘을 주면 되는데, transition.to() 함수로 힘에 따라서 위치값을 주고 떨어지는거 계산을 수시간 했다. transition.to()로 강제로 이동시키면 충돌과 같은 물리현상을 무시해 버린다. 벽을 뚫고 공이 지나간다던지...
암튼 코드는 엄청 간단하다.
Score 부분은 튕기면 1씩 증가하게 그냥 샘플로 만들었다.
레벨 개념, 블럭의 성질을 고무, 나무, 유리(깨지는 것) 등등으로 나누고 로직화 하면 진정한 게임이라고 할 수도 있을 것이다.
display.setStatusBar(display.HiddenStatusBar)
local physics = require("physics")
physics.start()
physics.setGravity(0, 9.8)
physics.setDrawMode("hybrid")
local ball = display.newCircle(100, 100, 20)
ball:setFillColor(255, 255, 0)
physics.addBody(ball, "dynamic", {density=1.0, friction=0.3, bounce=1.0, radius = 20})
ball.myName = "ball"
local target = display.newCircle(860, 330, 20)
target:setFillColor(255, 0, 0)
physics.addBody(target, "static", {radius = 20})
target.myName = "target"
local blockMaterial = {density=1.0, friction=0.3, bounce=0.0}
local wall = display.newRect(-90, 240, 200, 20)
physics.addBody(wall, "static", crateMaterial)
wall.rotation = 90
wall.myName = "wall"
local block = display.newRect(0, 350, 200, 20)
physics.addBody(block, "static", crateMaterial)
block.myName = "block"
local block2 = display.newRect(350, 450, 200, 20)
physics.addBody(block2, "static", crateMaterial)
block2.myName = "block"
local block3 = display.newRect(700, 350, 200, 20)
physics.addBody(block3, "static", crateMaterial)
block2.myName = "block"
local wall2 = display.newRect(790, 240, 200, 20)
physics.addBody(wall2, "static", crateMaterial)
wall2.rotation = 90
wall2.myName = "wall"
local score = 0
local scoreLabel = display.newText("Score : " .. score, 10, 10, display.contentWidth, display.contentHeight * 0.5, native.systemFont, 32)
local function updateScore()
scoreLabel.text = ("Score : " .. score)
end
local function onCollision( event )
if ( event.phase == "began" ) then
score = score + 1
updateScore()
if event.object2.myName == "target" then
print("success!!!")
end
elseif ( event.phase == "ended" ) then
end
end
local function moveBallLeftRightTouch( event )
if event.phase == "began" then
if event.x < 430 then
ballx = -50
elseif event.x > 430 then
ballx = 50
end
ball:applyForce( ballx, 0, ball.x, ball.y )
-- transition.to(ball, {time = 1000, x = ballx, onStart=isTest, onComplete=listener1 })
end
end
Runtime:addEventListener( "collision", onCollision )
Runtime:addEventListener("touch", moveBallLeftRightTouch )
반응형
'iDev > Corona SDK' 카테고리의 다른 글
다윤이와 함께 게임 만들기 - 게임 기획 (2) | 2013.12.10 |
---|---|
Corona SDK로 앵그리버드 스타일 게임 30분만에 만들기 (0) | 2013.10.24 |
Corona SDK 사용해서 러너 게임 만들기 #2 배경화면&움직이기 (1) | 2013.10.12 |
Corona SDK 사용해서 러너 게임 만들기 #1 들어가며 & 루아 기초 (0) | 2013.10.11 |