自由に動けるのってすばらしい

アフターバーナー再び。
上下にも動くようになった。

ほんとは視線が上下に傾いているはずだから、カメラを回転させる必要があるのだとは思うが。
あまりにも大変そうだったのでテキトーにごまかし。
ここまで動けばあとはミサイル飛ばしたり、っていうかその前に地面のオブジェクトをなんとかしたいような気も。

require 'dxruby'

image = Image.new(32,32)
image.box(13, 16, 18, 26, [255, 200, 50, 50]) # 木
image.line(13, 16, 13, 26, [255, 0, 0, 0])
image.line(18, 16, 18, 26, [255, 0, 0, 0])
image.circleFill(16, 8, 8, [255, 0, 255, 0])
image.circle(16, 8, 8, [255, 0, 0, 0])


class Bg
  @@ground = Image.new(1000,600, [255, 0, 0, 255])
  attr_accessor :y, :angle

  def initialize
    @y = 290
    @angle = 0
  end

  def update
    @angle -= Input.x
    if @angle < -60 then
      @angle = -60
    end
    if @angle > 60 then
      @angle =60
    end

    @y -= Input.y*3

    Window.drawRot(-180, @y, @@ground, angle, 500, 240-@y, 0)
  end
end

bg = Bg.new

Window.bgcolor = [200,250,255]

x = 320
y = 240

z = []
Obj = Struct.new(:x, :y, :z)
font = Font.new(32)

angle = 0
objx = 0

Window.loop do
  z.push(Obj.new(rand(2000)-680, 500, 5.0))

  rad = Math::PI/180.0*bg.angle
  sina = Math.sin(rad)
  cosa = Math.cos(rad)

  bg.update

  z.delete_if do |i|
    drawx = ((i.x - 320) / i.z * cosa - (((i.y - 240) / i.z - 50) / 290 * (530 - bg.y ) - 240 + bg.y) * sina)
    drawy = ((i.x - 320) / i.z * sina + (((i.y - 240) / i.z - 50) / 290 * (530 - bg.y ) - 240 + bg.y) * cosa)

    Window.drawEx(drawx + 320 - image.width / 2, drawy - image.height / 2 + 240, image, :scalex=>5.0 / i.z, :scaley=>5.0 / i.z, :z=>5 - i.z, :angle=>bg.angle)

    i.x += bg.angle / 3.0
    i.z -= 0.15
    if i.z < 1 then
      true
    else
      false
    end
  end

  break if Input.keyPush?(K_ESCAPE)
  Window.drawFont(0, 448, Window.getLoad.to_i.to_s + " %", font)
end