Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2006-11-22

テニスゲームの実装(3)

カメラクラスによる座標変換とスクリーン投影。

キャラクターをコート(コートのサイズは1000×1000)の四隅に見立てて、画面を見ながらキメウチでカメラのパラメータを割り出してみた。

class Camera
  def draw(*args)
    screen_z = 600.0
    y = 60
    z = -1300
    ry = Math::PI / 4
    args.to_a.flatten.each do |e|
      tx = e.x
      ty = e.y * Math.cos(ry) - e.z * Math.sin(ry)
      tz = e.y * Math.sin(ry) + e.z * Math.cos(ry)
      ty -= y

      perse = screen_z / (tz - z)
      e.view.x = tx * perse + screen.w / 2
      e.view.y = ty * perse + screen.h / 2
      e.view.scalex = e.view.scaley = perse * 2
      e.view.draw
    end
  end
end

あ、テニスのコートは正方形じゃない気がする。