앞에 기획에 이어서 이번에는 주인공 입력에 대한 부분을 구현 해보겠습니다.
중력은 physics.setGravity( 0, 0 ) 0 으로 설정합니다. 이렇게 하는 이유는 스크롤을 위해서 그렇습니다. 스크롤은 앞에서 날라오는 물체가 될텐데 중력이 적용되면 아래로 떨어지면서 날라오게됩니다.
그리고 주인공은 my.png로 대충 그립니다.
물리 관련해서는 addBody를 사용해 주며, isFixedRotation=true 설정을 해줍니다.
그러면 jump하는동안에 회전하지 않게 됩니다.
터치 핸들러에 applyForce로 y축으로 힘을 넣도록 합니다.
아래로 내려오는 중력 가속도가 없기 때문에 이벤트 루프 안에서 아래와 같은 코드를 넣습니다. 즉 프레임 마다 속도를 올려 주다가 일정 속도가 되면 속도 증가가 안되도록 합니다.
if( vy < 100 )then player:setLinearVelocity( vx, vy+7 ) end
main.lua 소스는 아래와 같습니다.
display.setStatusBar( display.HiddenStatusBar ) -- Physics local physics = require ("physics") physics.start() --physics.setDrawMode("hybrid") physics.setGravity( 0, 0 ) local player_outline = graphics.newOutline( 2, "my.png" ) local player = display.newImage("my.png") player.x = 40 player.y = 150 physics.addBody(player,"dynamic",{ outline=player_outline,density=10 }) player.isFixedRotation = true function flyUp(event) if event.phase == "began" then player:applyForce(0, -1500, player.x, player.y) end end Runtime:addEventListener("touch", flyUp) local function eventLoop() local vx, vy = player:getLinearVelocity() if( vy < 100 )then player:setLinearVelocity( vx, vy+7 ) end end Runtime:addEventListener( "enterFrame", eventLoop )
my.png
사용된 config.lua 는 아래와 같습니다. 돌아다니다가 구한 만능 config라고 합니다.
기본적으로 가로세로 정보는 아래와 같기 때문에 이미지 크기도 아래에 맞춰서 적당한 이미지를 사용하도록 하겠습니다.
width = 320, height = 570,
if string.sub(system.getInfo("model"),1,4) == "iPad" then application = { content = { width = 360, height = 480, scale = "letterBox", xAlign = "center", yAlign = "center", imageSuffix = { ["@2x"] = 1.5, ["@4x"] = 3.0, }, }, notification = { iphone = { types = { "badge", "sound", "alert" } } } } elseif string.sub(system.getInfo("model"),1,2) == "iP" and display.pixelHeight > 960 then application = { content = { width = 320, height = 568, scale = "letterBox", xAlign = "center", yAlign = "center", imageSuffix = { ["@2x"] = 1.5, ["@4x"] = 3.0, }, }, notification = { iphone = { types = { "badge", "sound", "alert" } } } } elseif string.sub(system.getInfo("model"),1,2) == "iP" then application = { content = { width = 320, height = 480, scale = "letterBox", xAlign = "center", yAlign = "center", imageSuffix = { ["@2x"] = 1.5, ["@4x"] = 3.0, }, }, notification = { iphone = { types = { "badge", "sound", "alert" } } } } elseif display.pixelHeight / display.pixelWidth > 1.72 then application = { content = { width = 320, height = 570, scale = "letterBox", xAlign = "center", yAlign = "center", imageSuffix = { ["@2x"] = 1.5, ["@4x"] = 3.0, }, }, LevelDirectorSettings = { imagesSubFolder = ".", levelsSubFolder = ".", } } else application = { content = { width = 320, height = 512, scale = "letterBox", xAlign = "center", yAlign = "center", imageSuffix = { ["@2x"] = 1.5, ["@4x"] = 3.0, }, }, notification = { iphone = { types = { "badge", "sound", "alert" } } }, LevelDirectorSettings = { imagesSubFolder = ".", levelsSubFolder = ".", } } end
댓글 없음:
댓글 쓰기