自由に動けるのってすばらしい
アフターバーナー再び。
上下にも動くようになった。
ほんとは視線が上下に傾いているはずだから、カメラを回転させる必要があるのだとは思うが。
あまりにも大変そうだったのでテキトーにごまかし。
ここまで動けばあとはミサイル飛ばしたり、っていうかその前に地面のオブジェクトをなんとかしたいような気も。
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