色の配列

DXRubyでは色の指定は3つないし4つの要素を持つ配列で行う。なぜこの形になっているのかというと、そのほうがコードを書くのがラクだったからだ。
例えばStarRubyとかMiyakoとかRGSSを見るとColorクラスというものが用意されている。Color.new(r,g,b,a=255)という見事にDXRuby以外共通の連合を組まれている。
まあ、正直なところ基本ARGBでAを省略してRGBというのは変だが。HLSLもRGBAだし。とはいえ今更なおすわけにも。


さてそのへんはRuby。気に入らなければ自分でクラスを作ればいいのだ。
たとえばこんな感じに。

require 'dxruby'

class Color < Array
  def initialize(r, g, b, a = 255)
    super()
    self << a << r << g << b
  end
  def alpha
    self[0]
  end
  def red
    self[1]
  end
  def green
    self[2]
  end
  def blue
    self[3]
  end
  def alpha=(val)
    self[0] = val
  end
  def red=(val)
    self[1] = val
  end
  def green=(val)
    self[2] = val
  end
  def blue=(val)
    self[3] = val
  end
end

image = Image.new(100,100,Color.new(255,255,255))

Window.loop do
  Window.draw(100,100,image)
end

ほら、同じ使い勝手になった。
同様にSpriteクラスの衝突判定範囲の指定もPointとかCircleとかBoxとかTriangleとかクラスを定義したら少しはわかりやすくなったりするのかもしれないな。