物を投げるとか自由落下
TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > 物を投げるとか自由落下
自然落下
ジャンプしたら落ちてくる。重力があるからなんだけど。それをプログラミングでやると、どうなるんだろう。
コード
DXRuby 1.3.6devにて。
#!ruby -Ks
require "dxruby"
EARTH_G = 9.8067
MAX_Y = 2.0000 # メートル単位
MAX_JUMP = 240.0
def rakka(t)
((Math.sqrt(2.0 * EARTH_G * MAX_Y) * t - 0.5 * EARTH_G * t**2) * MAX_JUMP / MAX_Y)
end
nt = 0
bt = 0
jump = false
sp = Sprite.new(320 - 8, 480 - 8, Image.new(8, 8).circleFill(4, 4, 4, [255, 80, 80]))
Window.loop do
sp.draw
if Input.keyPush?(K_RETURN)
jump = true
bt = 0
nt = 0
end
if jump
nt += 1
sp.y = 480 - rakka((nt - bt) * (1 / 60.0))
if sp.y > 480 - sp.image.height
jump = false
sp.y = 480 - sp.image.height
end
end
break if Input.keyPush?(K_ESCAPE)
end
C言語~ゲームプログラミングの館~を参考にしたけれど、これは2mのジャンプをディスプレイに表示させるためのプログラムということでいいのだろうか。
上記サイトではWindowsが起動してからの時間(DXライブラリのGetNowCount)を利用しているけど、ちょっとややこしくなりそうだったので、フレームごとカウントして、1 / 60をかけてあげる事にした。これで代わりになるのかなと。
うーん、アクションゲームって、キャラクターが自身の身長の数倍もの高さを飛んでしまうわけで、虚構の世界に現実の単位を持ってくると、結構ややこしくなるもんだねぇとなんとなく思ってしまったわけであります。