RGSS2を知る(30)
記念すべき30回目はTilemap。
FreeRGSSはせめてbltやdraw_textをきちんとしてから0.0.2をリリースしようと思っているのだが、どうにもめんどくさくて後回し状態。
data = "" open("data/Map001.rvdata","rb") do |fh| data = fh.read end d = Marshal.load(data) tilemap = Tilemap.new tilemap.bitmaps[0] = Bitmap.new("graphics/system/TileA1") tilemap.bitmaps[1] = Bitmap.new("graphics/system/TileA2") tilemap.bitmaps[2] = Bitmap.new("graphics/system/TileA3") tilemap.bitmaps[3] = Bitmap.new("graphics/system/TileA4") tilemap.bitmaps[4] = Bitmap.new("graphics/system/TileA5") tilemap.bitmaps[5] = Bitmap.new("graphics/system/TileB") tilemap.bitmaps[6] = Bitmap.new("graphics/system/TileC") tilemap.bitmaps[7] = Bitmap.new("graphics/system/TileD") tilemap.bitmaps[8] = Bitmap.new("graphics/system/TileE") tilemap.map_data = d.data loop do tilemap.ox += 2 tilemap.oy += 2 tilemap.update Graphics.update end
このコードはデータファイルさえあればツクールVXで動く。
Marshalした時点でRPGモジュールのクラスを作ろうとするが、エディタで見えているコードはすべて消してあるから、書いたRubyのコード以外の部分でRPGモジュールが定義されているのだろう。
だいたいRGSSをrequireする文もないのだから、どこで何をやっているかわからない。
これを動かしていると、マップがスクロールするわけだが、CPUの負荷はこんな感じで表示される。
うーん・・・どう解釈したらいいのか。
マップのどこかにさしかかったら重くなる、というわけでもないようで、普通に考えるととんでもなく重いマップ描画の仕組みだから、なんか一生懸命細工しているのではないかと思う。
RubyのGCならもっと尖った負荷が出るだろうし、このような変動をするということは、並列処理でマップデータの整理でもしてるんだろうか。スクロールしなくても負荷変わらないし。
まあ、RPGのマップ描画ならマップを描くときには他の処理はほとんどないわけで、別にTilemapが重くても60fpsさえ出ればあまり問題はないだろう。RPGみたいなゲームにしか使わないからな。