サンプルLaser.rb作り直し中
DXRubyのサンプルにLaser.rbというのがある。この記事で作ったやつだ。
http://d.hatena.ne.jp/mirichi/20100125/p1
判定にDXRubyExを使っているが、それでもレーザーを三角2つで表現するために自前で回転させたりして面倒だった。DXRuby1.3系ではSpriteクラスとそれの衝突判定機能により、前よりずっと簡単に作れるのではないか、と思って、ちょっと試していた。
せっかくなので少しだけ進化させてみようと実験していたのだが、なんとなくうまく動いているのでプロトタイプを公開。これを作りこんでサンプルのLaser.rbを置き換える予定。
手元の開発版にしかまだ入っていない円と矩形の衝突判定を使っているので、現時点では俺以外に動作させることができる人はいない。ごめんなさい。
#!ruby -Ks require 'dxruby' Window.mag_filter = TEXF_POINT s = [] 20.times do |i| t = Sprite.new(145, 474, Image.new(20, 1)) # 縦1ピクセルの横長の画像 t.image[i, 0] = [128, 255, 255, 255] # 該当箇所に点をうつ t.scale_y = 800 # 長さ t.center_x = 10 # 画像の真ん中 t.center_y = 1 # 画像の下の端 t.collision = [i, 0, i, 0] # 矩形で1ピクセルの判定範囲 s.push t end x = 145 y = 474 cs = Sprite.new(100, 100, Image.new(100, 100).circle_fill(50, 50, 50, [255, 0, 255])) cs.collision = [50, 50, 50] Window.loop do if Input.mouse_down?(M_LBUTTON) mx,my = Input.mouse_pos_x, Input.mouse_pos_y temp = Math.atan2(mx - x, y - my) / Math::PI * 180 s.each do |i| i.angle = temp end s.each do |i| if i === cs length = Math::sqrt(((cs.x + cs.image.width/2) - (x+10))**2 + ((cs.y + cs.image.height/2) - (y+10))**2) i.scale_y = length else i.scale_y = 800 end i.draw end end cs.draw end