てきとうなさいと べぇたばん

物を投げるとか自由落下

初期位置。 RETURNキーを押すと、240px先まで飛んでったあと、落ちてくる

自然落下

ジャンプしたら落ちてくる。重力があるからなんだけど。それをプログラミングでやると、どうなるんだろう。

コード

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をかけてあげる事にした。これで代わりになるのかなと。

うーん、アクションゲームって、キャラクターが自身の身長の数倍もの高さを飛んでしまうわけで、虚構の世界に現実の単位を持ってくると、結構ややこしくなるもんだねぇとなんとなく思ってしまったわけであります。