Sprite#checkを作った

画面をマスで区切ってマウスで選択する場合、座標をいちいち計算するのは面倒くさい。特に、マップエディタなんかの場合に左側にマップ、右側にチップとかすると面倒くささが増大する。しかもマスのサイズを小さくしてマップを広く見るモードとかを追加しようものならさらに面倒だ。
マスは単純な矩形だし、画像を描画してマウスの位置を知ることができればいいので、Spriteオブジェクトを並べて衝突判定してやれば楽なのではないかということを考えた。が、マスをオブジェクトとして扱い、オブジェクト指向的な仕掛けで処理をするのはいかにもオーバースペックだったので、もっと簡単に使えるようSprite#checkを追加してみた。

#!ruby -Ks
require 'dxruby'

sprites = []
image = Image.new(64, 64).box(0, 0, 63, 63,[255, 255, 255])
for i in 0..7
  for j in 0..9
    sprites << Sprite.new(j * 64, i * 64, image)
  end
end

image_select = Image.new(64, 64, [128, 255, 255, 255])
sprite_mouse = Sprite.new
sprite_mouse.collision = [0, 0]

Window.loop do
  sprite_mouse.x, sprite_mouse.y = Input.mouse_pos_x, Input.mouse_pos_y

  temp = sprite_mouse.check(sprites) # 衝突チェック

  if temp # 当たっていれば配列が返る
    temp.each do |s|
      Window.draw(s.x, s.y, image_select)
    end
  end
  
  sprites.each do |s|
    s.draw
  end
end

まあ、使いやすいかはさておき、より柔軟な使い方ができるようにはなった。かな?