RGSS2を知る(25)
ピンポイントに調べた。
class Bitmap def initialize(*) end end b = Bitmap.new(200,100) b.clear
このコードはBitmapのinitializeを無効にする。
通常、Cで書く拡張ライブラリでは、newしたときにCのallocate関数でオブジェクトメモリを確保し、Rubyのinitializeを呼ぶ。
Bitmapクラスの場合、ファイル名やサイズを渡して初期化するのはinitializeメソッドであり、それが呼ばれなければ内部的に画像データのメモリは取得されないはずである。
この状態でなんらかのメソッドを呼び出すと、存在しない画像データに対して処理を行い、コケる、というのはよくあるバグだ。
結果はこう。
どうやらallocate時点ではdisposeされている。
initializeを呼ぶとdisposeが解除される、ということらしい。
ちなみにDXRubyのImgaeクラスでこれをやると見事にコケるので真似しないよーに。
修正せねば。