サンプル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