RGSS Tips @Wiki
プレイヤーのいるマップを一枚絵にする(タイルのみ)
最終更新:
匿名ユーザー
-
view
オートタイルは、内部でタイルの配置を換えています。(左の画像から右の画像へ) AUTOTILE_DATA = [26,27, 4,27,26, 5, 4, 5,26,27, 4,27,26, 5, 4, 5, 32,33,32,33,32,33,32,33,32,11,32,11,32,11,32,11, 26,27, 4,27,26, 5, 4, 5,26,27, 4,27,26, 5, 4, 5, 10,33,10,33,10,33,10,33,10,11,10,11,10,11,10,11, 24,25,24, 5,24,25,24, 5,14,15,14,15,14,15,14,15, 30,31,30,31,30,11,30,11,20,21,20,11,10,21,10,11, 28,29,28,29, 4,29, 4,29,38,39, 4,39,38, 5, 4, 5, 34,35,10,35,34,35,10,35,44,45,44,45,44,45,44,45, 24,29,14,15,12,13,12,13,16,17,16,17,40,41, 4,41, 30,35,44,45,18,19,18,11,22,23,10,23,46,47,46,47, 36,37,36, 5,12,17,12,13,36,41,16,17,12,17, 0, 1, 42,43,42,43,18,23,42,43,42,47,46,47,42,47, 6, 7 ] #-------------------------------------------------------------------------- # ● タイルを展開してまとめる (タイルとオートタイル) #-------------------------------------------------------------------------- def make_tile # タイルを取得 tileset = RPG::Cache.tileset($game_map.tileset_name) autotile_height = 32 * 6 * 8 bitmap = Bitmap.new(tileset.width, autotile_height + tileset.height) src_rect = Rect.new(0, 0, tileset.width, tileset.height) bitmap.blt(0, autotile_height, tileset, src_rect) # オートタイルを取得 for i in 0..6 autotile_name = $game_map.autotile_names[i] unless autotile_name.empty? autotile = RPG::Cache.autotile(autotile_name) for n in 0...AUTOTILE_DATA.size id = AUTOTILE_DATA[n] x = id % 6 * 16 y = id / 6 * 16 src_rect.set(x, y, 16, 16) x = n % 16 * 16 y = (i + 1) * 6 * 32 + n / 16 * 16 bitmap.blt(x, y, autotile, src_rect) end end end return bitmap end これで一枚の画像にまとめられたタイルが返ります。 オートタイルは7個ですが空のタイルを最初に入れて8個にしています。(下の tile_data の番号にあわせるため) 上の make_tile で作った画像を下の make_map に渡します。 #-------------------------------------------------------------------------- # ● マップの作成 #-------------------------------------------------------------------------- def make_map(tile_bitmap) # 標準サイズで作成 map_bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32) for y in 0...$game_map.height for x in 0...$game_map.width for z in 0...3 tile_data = $game_map.data[x, y, z] next if tile_data == nil # 空タイルの以外の場合 unless tile_data < 48 src_rect = Rect.new(tile_data % 8 * 32, tile_data / 8 * 32, 32, 32) map_bitmap.blt(x * 32, y * 32, tile_bitmap, src_rect) end end end end tile_bitmap.dispose tile_bitmap = nil return map_bitmap end これでマップ画像が返ります。