物理エンジンを使う 2, 何かを重力に任せて落とす

--[[
物理エンジンを使う 2, 何かを重力に任せて落とす
画面中央の上端から勢いをつけずにそのまま落とす。
円を描いてはいるがまだ Shape を設定していないので今のところ図形に意味はない。ただ質点を示しているだけである。
--]]

require "physics"
H       = platform.window:height()
W       = platform.window:width()
dt      = 0.01   
velX    = 0
velY    = 0
posX    = W/2
posY    = 0
mass    = 100
gravity = 100

space = physics.Space()
space:setGravity(physics.Vect(0, gravity)) 
newBody = physics.Body(mass, 0) 
newBody:setVel(physics.Vect(velX, velY))
newBody:setPos(physics.Vect(posX, posY))
space:addBody(newBody)

function on.paint(gc)
   fillCircleCenter(posX, posY, W/10, 0x000000, gc)   
end
function on.timer()
   space:step(dt)
   pos  = newBody:pos()
   posY = pos:y()
   if posY > H then timer.stop() end -- 画面下端にぶつかったらタイマーをとめる。
   platform.window:invalidate()
end
function on.enterKey()
   timer.start(dt)
end

-----------------------
-- general functions --
-----------------------
function fillCircleCenter(cx, cy, radius, color, gc)
   gc:setColorRGB(color)
   gc:fillArc(cx - radius, cy - radius, radius + radius, radius + radius, 0, 360)
end