Project1

标题: 请问这个日站的脚本要怎样显示小地图 [打印本页]

作者: soulsaga    时间: 2015-9-6 23:08
标题: 请问这个日站的脚本要怎样显示小地图
本帖最后由 soulsaga 于 2015-9-6 23:11 编辑

设定:
RUBY 代码复制
  1. #==============================================================================
  2. # ■ XP-RGSS-70 マップビュー [Ver.1.0.0]             by Claimh
  3. #------------------------------------------------------------------------------
  4. # ・マップ全体を見たり、ミニマップを表示することができます。
  5. #------------------------------------------------------------------------------
  6. # ● ミニマップの表示ON/OFF(イベント)
  7. #  minimap(flag)
  8. #     flag  : true…表示、 false…非表示
  9. #------------------------------------------------------------------------------
  10. # ● ミニマップの再描画
  11. #  refresh_minimap
  12. #------------------------------------------------------------------------------
  13. # ● ミニマップ表示状態
  14. #  $game_system.miniview
  15. #------------------------------------------------------------------------------
  16. # ● フルビュー表示シーンへの切り替え
  17. #  $scene = Scene_MapView.new(menu_index, map_id)
  18. #     menu_index  : メニューIndex(省略時はマップに戻る)
  19. #     map_id      : マップID(省略時は現在マップ)
  20. #------------------------------------------------------------------------------
  21. # ● 注意点
  22. # ミニマップ表示をさせるためにTilemapクラスとは仕様を変えてます。
  23. # パノラマ、フォグは表示されません
  24. # ● イベントの注意点
  25. # ミニマップ表示内のイベント表示、オートタイル表示は更新されません。
  26. # ミニマップでは移動するイベントは表示させないようにすることを推奨します。
  27. # また、1個の高さが64以上のものはタイルのプライオリティ通りには描画されません。
  28. # (最前列に表示するなどして対処してください)
  29. # ● マップの注意点
  30. # 広いマップでは表示開始が遅くなるので注意してください…
  31. # (広すぎる場合はBitmap生成に失敗します)
  32. # あと、それなりにメモリも食います。
  33. #==============================================================================
  34.  
  35. module MapView
  36.   #----------------------------------------------------------------------------
  37.   # ミニマップ設定
  38.   #----------------------------------------------------------------------------
  39.   # ミニマップを表示する
  40.   USE_MINIMAP = true
  41.  
  42.   # 表示制限を使う
  43.   #   true  : マップ名、イベント名に[m]が入っている場合のみ表示
  44.   #   false : 全マップ、全イベントで表示有効
  45.   M_MAP_FLT_MAP = false  # マップ用
  46.   M_MAP_FLT_EV  = true  # イベント用
  47.  
  48.   # ボタン(プレイヤー操作)による表示ON/OFFをする
  49.   USE_M_MAP_DIRECT = true
  50.   # ミニマップ表示切り替えボタン
  51.   M_MAP_D_KEY = Input::L
  52.  
  53.   # ズーム倍率(0は禁止)
  54.   M_MAP_ZOOM = 0.2
  55.  
  56.   # ミニマップの不透明度
  57.   M_MAP_OP = 180
  58.   # ミニマップ裏に黒背景を表示させる(見やすくするための措置)
  59.   M_MAP_BACK = true
  60.   # ミニマップ裏の黒背景の不透明度
  61.   M_MAP_BACK_OP = 200
  62.  
  63.   # プレイヤー位置の表示色
  64.   M_MAP_CH_CLR = Color.new(200, 0, 0, 255)
  65.  
  66.   # 表示位置
  67.   #  1:右下 … Rect.new(      N, 480-H-N, W, H)
  68.   #  3:左下 … Rect.new(640-W-N, 480-H-N, W, H)
  69.   #  7:右上 … Rect.new(      N,       N, W, H)
  70.   #  9:左上 … Rect.new(640-W-N,       N, W, H)
  71.   M_MAP_FIT = 9
  72.   # 表示サイズ
  73.   #   _N:画面端からの位置, _W:矩形幅, _H:矩形高さ
  74.   M_MAP_RECT_N = 10
  75.   M_MAP_RECT_W = 200
  76.   M_MAP_RECT_H = 150
  77.  
  78.  
  79.   #----------------------------------------------------------------------------
  80.   # フルビュー設定
  81.   #----------------------------------------------------------------------------
  82.   # ボタン一発呼び出しによるフルビュー表示を使う
  83.   # (falseでもシーン切り替えをすればフルビュー表示可能)
  84.   USE_F_MAP_DIRECT = true
  85.   # 呼び出しボタン
  86.   F_MAP_D_KEY = Input::R
  87.  
  88.   # 表示制限を使う
  89.   #   true  : マップ名、イベント名に[m]が入っている場合のみ表示
  90.   #   false : 全マップ、全イベントで表示有効
  91.   F_MAP_FLT_MAP = false  # マップ用
  92.   F_MAP_FLT_EV  = false  # イベント用
  93.  
  94.   # ズーム倍率(0:自動調整、0より上:固定倍率表示)
  95.   F_MAP_ZOOM = 0.5
  96.   # フル表示切り替えを行う(F_MAP_ZOOM != 0のとき有効)
  97.   # ※決定ボタンで切り替え
  98.   F_MAP_CHG_FL = true
  99.   # 上下キーによるズームイン・ズームアウトを行う
  100.   F_MAP_ZOOM_IO = true
  101.  
  102.   # マップ名を表示する
  103.   F_MAP_NAME = true
  104.   # ツリー最上段のマップ名を表示する
  105.   F_MAP_NAME_TOP = true
  106.   # マップ名表示形式(true:Window表示, false:Sprite表示)
  107.   F_MAP_NAME_WIN = true
  108.   # Sprite表示時の背景画像(Graphics/Windowskin)
  109.   F_MAP_NAME_BG = "mapname_back.png"
  110.   # マップ名表示位置
  111.   #  1:右下 … Rect.new(      N, 480-H-M, W, H)
  112.   #  3:左下 … Rect.new(640-W-N, 480-H-M, W, H)
  113.   #  7:右上 … Rect.new(      N,       M, W, H)
  114.   #  9:左上 … Rect.new(640-W-N,       M, W, H)
  115.   F_MAP_FIT = 3
  116.   # マップ名表示サイズ ※Sprite時は_W, _Hは無効(背景画像のサイズを使う)
  117.   #   _N:画面端からの位置(X), _N:画面端からの位置(Y), _W:矩形幅, _H:矩形高さ
  118.   F_MAP_RECT_N = 0
  119.   F_MAP_RECT_M = 10
  120.   F_MAP_RECT_W = 260
  121.   F_MAP_RECT_H = 64
  122.  
  123.   # オートタイルのアニメーション有り
  124.   # ※trueにすると一部のマップで処理負荷が高くなります。
  125.   F_MAP_AT = false
  126.  
  127. ################################################################################
  128. end
  129.  
  130.  
  131. #==============================================================================
  132. # ■ MapView
  133. #==============================================================================
  134. module MapView
  135.   #--------------------------------------------------------------------------
  136.   # ● 表示できる?
  137.   #--------------------------------------------------------------------------
  138.   def self.viewable?(map_id)
  139.     mapInfo = load_data(sprintf("Data/MapInfos.rxdata"))
  140.     return (mapInfo[map_id].name.split("[m]").size != 1)
  141.   end
  142.   def self.c_viewable?
  143.     return viewable?($game_map.map_id)
  144.   end
  145.   def self.fc_visible?
  146.     return true unless F_MAP_FLT_EV
  147.     return c_viewable?
  148.   end
  149.   def self.mc_visible?
  150.     return true unless M_MAP_FLT_EV
  151.     return c_viewable?
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● マップ名表示クラス
  155.   #--------------------------------------------------------------------------
  156.   def self.map_name_class(map_id)
  157.     return F_MAP_NAME_WIN ? Window_MapViewName.new(map_id) :
  158.                             Sprite_MapViewName.new(map_id)
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● マップ名取得
  162.   #--------------------------------------------------------------------------
  163.   def self.map_name(mapInfo, mapId)
  164.     if F_MAP_NAME_TOP
  165.       return mapInfo[top_map_id(mapInfo, mapId)].name.delete("[m]")
  166.     else
  167.       return mapInfo[mapId].name.delete("[m]")
  168.     end
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● 親マップID取得
  172.   #--------------------------------------------------------------------------
  173.   def self.top_map_id(mapInfo, mapId)
  174.     loop do
  175.       p_id = mapInfo[mapId].parent_id
  176.       return mapId if p_id == 0
  177.       mapId= p_id
  178.     end
  179.   end
  180. end
  181.  
  182.  
  183. #==============================================================================
  184. # ■ MapViewSet : 設定クラス
  185. #==============================================================================
  186. class MapViewSet
  187.   attr_accessor :map_id
  188.   attr_accessor :mini
  189.   attr_accessor :rect
  190.   attr_accessor :opacity
  191.   attr_accessor :z
  192.   def initialize
  193.     @map_id = $game_map.map_id
  194.     @mini = false
  195.     @rect = Rect.new(0,0,640,480)
  196.     @opacity = 255
  197.     @z = 100
  198.   end
  199. end
  200. #==============================================================================
  201. # ■ MapViewMini : ミニマップ用設定クラス
  202. #==============================================================================
  203. class MapViewMini < MapViewSet
  204.   def initialize
  205.     super
  206.     @mini = true
  207.     n = MapView::M_MAP_RECT_N
  208.     w = MapView::M_MAP_RECT_W
  209.     h = MapView::M_MAP_RECT_H
  210.     case MapView::M_MAP_FIT # 表示位置をあわせる
  211.     when 1; @rect = Rect.new(      n, 480-h-n, w, h)
  212.     when 3; @rect = Rect.new(640-w-n, 480-h-n, w, h)
  213.     when 7; @rect = Rect.new(      n,       n, w, h)
  214.     when 9; @rect = Rect.new(640-w-n,       n, w, h)
  215.     end
  216.     @opacity = MapView::M_MAP_OP
  217.     @z = 1000
  218.   end
  219. end
  220. #==============================================================================
  221. # ■ MapViewFull : フルビュー用設定クラス
  222. #==============================================================================
  223. class MapViewFull < MapViewSet
  224.   def initialize(map_id=-1)
  225.     super()
  226.     @map_id = map_id if map_id >= 0
  227.   end
  228. end
  229.  
  230.  
  231. #==============================================================================
  232. # ■ Game_Event
  233. #==============================================================================
  234. class Game_Event < Game_Character
  235.   #--------------------------------------------------------------------------
  236.   # ● マップ表示あり
  237.   #--------------------------------------------------------------------------
  238.   def enable_mapview?(mini=false)
  239.     return true if mini  and !MapView::M_MAP_FLT_EV
  240.     return true if !mini and !MapView::F_MAP_FLT_EV
  241.     return (@event.name.split("[m]").size != 1)
  242.   end
  243. end
  244.  
  245. #==============================================================================
  246. # ■ Game_Character
  247. #==============================================================================
  248. class Game_Character
  249.   attr_reader :always_on_top  # 最前列表示
  250. end


主要脚本
RUBY 代码复制
  1. #==============================================================================
  2. # ■ XP-RGSS-70 マップビュー [main]             by Claimh
  3. #------------------------------------------------------------------------------
  4. # [再定義] Scene_Map#update
  5. #==============================================================================
  6.  
  7. #==============================================================================
  8. # ■ Sprite_MapViewBack : ミニマップ用背景スプライト
  9. #==============================================================================
  10. class Sprite_MapViewBack < Sprite
  11.   #--------------------------------------------------------------------------
  12.   # ● オブジェクト初期化
  13.   #--------------------------------------------------------------------------
  14.   def initialize(viewport, w, h, mini)
  15.     super(viewport)
  16.     self.bitmap = Bitmap.new(w, h)
  17.     self.bitmap.fill_rect(0, 0, w, h, Color.new(0,0,0))
  18.     self.z = 0
  19.     self.visible = mini
  20.     self.opacity = MapView::M_MAP_BACK_OP
  21.   end
  22. end
  23.  
  24. #==============================================================================
  25. # ■ Sprite_MapViewCharacter : キャラクタースプライト
  26. #==============================================================================
  27. class Sprite_MapViewCharacter < Sprite
  28.   OPP = 12
  29.   #--------------------------------------------------------------------------
  30.   # ● オブジェクト初期化
  31.   #--------------------------------------------------------------------------
  32.   def initialize(viewport, zoom, mini, character=nil)
  33.     @character = character
  34.     @opp = OPP
  35.     @mini = mini
  36.     @time = @m_idx = @_blink_count = 0
  37.     super(viewport)
  38.     if @mini
  39.       self.bitmap = Bitmap.new(32, 32)
  40.     else
  41.       b = RPG::Cache.character(@character.character_name, @character.character_hue)
  42.       self.bitmap = Bitmap.new(b.width / 4, b.height / 4)
  43.       self.bush_depth = @character.bush_depth
  44.     end
  45.     self.ox = @c_ox = self.oy = @c_oy = 0
  46.     self.zoom_x = self.zoom_y = zoom
  47.     self.z = 100
  48.     refresh
  49.     update_blink
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 位置情報(x)
  53.   #--------------------------------------------------------------------------
  54.   def p_x
  55.     return (@character.nil? ? $game_player.x : @character.x) * 32
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 位置情報(y)
  59.   #--------------------------------------------------------------------------
  60.   def p_y
  61.     return (@character.nil? ? $game_player.y : @character.y) * 32
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 位置情報(ox)
  65.   #--------------------------------------------------------------------------
  66.   def ox=(x)
  67.     super(@c_ox + x)
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 位置情報(oy)
  71.   #--------------------------------------------------------------------------
  72.   def oy=(y)
  73.     super(@c_oy + y)
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● リフレッシュ
  77.   #--------------------------------------------------------------------------
  78.   def refresh
  79.     self.bitmap.clear
  80.     @mini ? draw_point : draw_char
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● キャラクター描画
  84.   #--------------------------------------------------------------------------
  85.   def draw_point
  86.     self.bitmap.fill_rect(Rect.new(0,0,32,32), MapView::M_MAP_CH_CLR)
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● キャラクター描画
  90.   #--------------------------------------------------------------------------
  91.   def draw_char
  92.     @c_pt = @mini ? @character.pattern : @m_idx
  93.     @c_dr = @mini ? @character.direction : 2
  94.     b = RPG::Cache.character(@character.character_name, @character.character_hue)
  95.     cw = b.width / 4
  96.     ch = b.height / 4
  97.     sx = @c_pt * cw
  98.     sy = (@c_dr - 2) / 2 * ch
  99.     self.bitmap.blt(0, 0, b, Rect.new(sx, sy, cw, ch))
  100.     @c_ox = (cw - 32) / 2
  101.     @c_oy = (ch > 48) ? (ch / 2) : (ch - 32)
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● フレーム更新
  105.   #--------------------------------------------------------------------------
  106.   def update
  107.     @mini ? update_mini : update_full
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● フレーム更新(ミニマップ用)
  111.   #--------------------------------------------------------------------------
  112.   def update_mini
  113.     self.opacity -= @opp
  114.     if self.opacity <= 0
  115.       @opp = -OPP
  116.     elsif self.opacity >= 255
  117.       @opp = OPP
  118.     end
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● フレーム更新(フルビュー用)
  122.   #--------------------------------------------------------------------------
  123.   def update_full
  124.     update_blink
  125.     @time += 1
  126.     if @time == 16
  127.       @m_idx = (@m_idx + 1) % 4
  128.       @time = 0
  129.       refresh
  130.     end
  131. #    if @c_pt != @character.pattern or @c_dr != @character.direction
  132. #      refresh
  133. #    end
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● フレーム更新(blink)
  137.   #--------------------------------------------------------------------------
  138.   def update_blink
  139.     @_blink_count = (@_blink_count + 1) % 32
  140.     if @_blink_count < 16
  141.       alpha = (16 - @_blink_count) * 6
  142.     else
  143.       alpha = (@_blink_count - 16) * 6
  144.     end
  145.     self.color.set(255, 255, 255, alpha)
  146.   end
  147. end
  148.  
  149. #==============================================================================
  150. # ■ MapViewMas : タイルセット&イベント情報管理クラス(1マス)
  151. #==============================================================================
  152. class MapViewMas
  153.   attr_reader :layer
  154.   attr_reader :tile_id
  155.   attr_reader :ev
  156.   def initialize(layer=0, tile_id=0, ev=nil)
  157.     @layer = layer; @tile_id = tile_id; @ev = ev
  158.   end
  159. end
  160.  
  161. #==============================================================================
  162. # ■ MapViewPriority : タイルセット&イベント情報管理クラス
  163. #==============================================================================
  164. class MapViewPriority
  165.   PRI_MAX = 6 + 3 # タイルセット*6 + イベント*2
  166.   def initialize(w,h)
  167.     @data = Table.new(w, h, PRI_MAX)
  168.     @last_id = 0
  169.     @array = []
  170.   end
  171.   def set(x, y, pri, mas)
  172.     if @data[x, y, pri] == 0 or @data[x, y, pri].nil?
  173.       @last_id += 1
  174.       @data[x, y, pri] = @last_id
  175.     end
  176.     @array[@data[x, y, pri]] = [] if @array[@data[x, y, pri]].nil?
  177.     @array[@data[x, y, pri]].push(mas)
  178.   end
  179.   def get(x, y, pri)
  180.     return [] if @array[@data[x, y, pri]].nil?
  181.     return @array[@data[x, y, pri]]
  182.   end
  183. end
  184.  
  185. #==============================================================================
  186. # ■ MapViewAutotile : オートタイル位置
  187. #==============================================================================
  188. class MapViewAutotilePos
  189.   attr_reader :x
  190.   attr_reader :y
  191.   attr_reader :l
  192.   def initialize(x, y, l)
  193.     @x = x; @y = y; @l = l
  194.   end
  195. end
  196. #==============================================================================
  197. # ■ MapViewAutotile : オートタイルアニメーション情報
  198. #==============================================================================
  199. class MapViewAutotile
  200.   attr_reader :pos
  201.   attr_reader :anime_i
  202.   def initialize(w,h,l)
  203.     @pos = []
  204.     @anime_i = Table.new(w, h, l)
  205.   end
  206.   def set_point(x, y, l)
  207.     @pos.push(MapViewAutotilePos.new(x, y, l))
  208.     @anime_i[x, y, l] = 0
  209.   end
  210.   def next_i(x, y, l, koma)
  211.     @anime_i[x, y, l] = (@anime_i[x, y, l] + 1) % koma
  212.   end
  213. end
  214.  
  215. #==============================================================================
  216. # ■ Sprite_MapView : タイルセット、イベント、プレイヤー表示クラス
  217. #==============================================================================
  218. class Sprite_MapView
  219.   #--------------------------------------------------------------------------
  220.   #【仕様!】
  221.   # 負荷を抑えるための制限事項(主にミニマップ)
  222.   #  ・イベント、タイル毎のスプライトは作らない(=z軸は正確に配置されない)
  223.   #  ・イベント表示は更新しない
  224.   #  ・ミニマップ時はオートタイルの更新はしない
  225.   #  ・プレイヤーは最上位に表示
  226.   #--------------------------------------------------------------------------
  227.   #--------------------------------------------------------------------------
  228.   # ● オブジェクト初期化
  229.   #--------------------------------------------------------------------------
  230.   def initialize(mapview)
  231.     @map_id = mapview.map_id
  232.     @time = 0
  233.     @mini = mapview.mini
  234.     @auto_tile = (!@mini and MapView::F_MAP_AT) # ミニマップでは無効
  235.     # mapデータ読み込み
  236.     @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  237.     # マップイベントのデータを設定
  238.     @events = []
  239.     for i in @map.events.keys.sort
  240.       ev = Game_Event.new(@map_id, @map.events[i])
  241.       next unless ev.enable_mapview?(@mini)
  242.       @events.push(ev)
  243.     end
  244.     @events.sort {|a, b| a.screen_z(RPG::Cache.character(a.character_name, a.character_hue).height / 4) - b.screen_z(RPG::Cache.character(b.character_name, b.character_hue).height / 4)}
  245.     # タイルセットデータ
  246.     @tileset = $data_tilesets[@map.tileset_id]
  247.     # オートタイルデータ
  248.     @at = MapViewAutotile.new(@map.width, @map.height, 3)
  249.     if @mini
  250.       vx = 640 - mapview.rect.x - mapview.rect.width
  251.       vy = 480 - mapview.rect.y - mapview.rect.height
  252.       zw = @map.width  * 32.0 * MapView::M_MAP_ZOOM
  253.       zh = @map.height * 32.0 * MapView::M_MAP_ZOOM
  254.       case MapView::M_MAP_FIT
  255.       when 1
  256.         mapview.rect.y = 480 - zh - vy if mapview.rect.height > zh
  257.       when 3
  258.         mapview.rect.x = 640 - zw - vx if mapview.rect.width > zw
  259.         mapview.rect.y = 480 - zh - vy if mapview.rect.height > zh
  260.       when 7
  261.       when 9
  262.         mapview.rect.x = 640 - zw - vx if mapview.rect.width > zw
  263.       end
  264.     end
  265.     # マップデータ作成
  266.     @data = MapViewPriority.new(@map.width, @map.height)
  267.     make_mapdata
  268.     ############################################################################
  269.     @viewport = Viewport.new(mapview.rect)
  270.     @viewport.z = mapview.z
  271.     # 表示スプライト(タイルセット+イベントの転送先)
  272.     @viewsprite = Sprite.new(@viewport)
  273.     @viewsprite.bitmap = Bitmap.new(r_w, r_h)
  274.     @viewsprite.opacity = mapview.opacity
  275.     @viewsprite.z = 10
  276.     # 位置補正
  277.     if !@mini and MapView::F_MAP_ZOOM == 0
  278.       ajust_zoom
  279.     else
  280.       self.zoom = @mini ? MapView::M_MAP_ZOOM : MapView::F_MAP_ZOOM
  281.     end
  282.     ajust_pos unless @mini
  283.     # マップ描画
  284.     draw_map
  285.     # カレントマップのときは現在位置表示
  286.     @player = nil
  287.     if @map_id == $game_map.map_id
  288.       @player = Sprite_MapViewCharacter.new(@viewport, @zoom, mapview.mini, $game_player)
  289.       @player.z = @mini ? 1000 : 10
  290.     end
  291.     @back = Sprite_MapViewBack.new(@viewport, z_w, z_h, @mini)
  292.     update_filter
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● ズーム倍率変更(アスペクト比固定)
  296.   #--------------------------------------------------------------------------
  297.   def zoom=(z)
  298.     @zoom = z
  299.     @player.zoom_x = @player.zoom_y = z  unless @player.nil?
  300.     @viewsprite.zoom_x = @viewsprite.zoom_y = z
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 位置補正処理
  304.   #--------------------------------------------------------------------------
  305.   def ajust_pos
  306.     zw = z_w; zh = z_h; vw = v_w; vh = v_h
  307.     @viewsprite.x = zw < vw ? (vw - zw) / 2 : 0
  308.     @viewsprite.y = zh < vh ? (vh - zh) / 2 : 0
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● 画面に合わせたズーム倍率を決める
  312.   #--------------------------------------------------------------------------
  313.   def ajust_zoom
  314.     x_zoom = (v_w * 1.0) / r_w
  315.     y_zoom = (v_h * 1.0) / r_h
  316.     self.zoom = x_zoom < y_zoom ? x_zoom : y_zoom
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● ビューポート矩形
  320.   #--------------------------------------------------------------------------
  321.   def v_w;  return (@viewport.rect.width  * 1.0); end
  322.   def v_h;  return (@viewport.rect.height * 1.0); end
  323.   #--------------------------------------------------------------------------
  324.   # ● リアル矩形
  325.   #--------------------------------------------------------------------------
  326.   def r_w;  return (@map.width  * 32.0); end
  327.   def r_h;  return (@map.height * 32.0); end
  328.   #--------------------------------------------------------------------------
  329.   # ● ズーム矩形
  330.   #--------------------------------------------------------------------------
  331.   def z_w;  return (r_w * 1.0 * @zoom);  end
  332.   def z_h;  return (r_h * 1.0 * @zoom);  end
  333.   #--------------------------------------------------------------------------
  334.   # ● 解放
  335.   #--------------------------------------------------------------------------
  336.   def dispose
  337.     @viewsprite.bitmap.dispose unless @viewsprite.bitmap.nil?
  338.     @viewsprite.dispose
  339.     @player.dispose unless @player.nil?
  340.     @back.dispose
  341.     @viewport.dispose
  342.     @map = @data = @events = @at = nil
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● 表示
  346.   #--------------------------------------------------------------------------
  347.   def visible=(f)
  348.     @viewsprite.visible = f
  349.     @player.visible = f unless @player.nil?
  350.     @back.visible = f
  351.   end
  352.   #----------------------------------------------------------------------------
  353.   # ● リフレッシュ
  354.   #----------------------------------------------------------------------------
  355.   def refresh
  356.     @viewsprite.bitmap.clear
  357.     @events = []
  358.     for i in @map.events.keys.sort
  359.       ev = Game_Event.new(@map_id, @map.events[i])
  360.       next unless ev.enable_mapview?(@mini)
  361.       @events.push(ev)
  362.     end
  363.     @events.sort {|a, b| a.screen_z(RPG::Cache.character(a.character_name, a.character_hue).height / 4) - b.screen_z(RPG::Cache.character(b.character_name, b.character_hue).height / 4)}
  364.     @data = MapViewPriority.new(@map.width, @map.height)
  365.     make_mapdata
  366.     draw_map
  367.     update_filter
  368.   end
  369.   #----------------------------------------------------------------------------
  370.   # ● Priority毎のマップデータ生成
  371.   #----------------------------------------------------------------------------
  372.   def make_mapdata
  373.     # タイルマップ
  374.     for i in 0..2
  375.       for yi in [email]0...@map.height[/email]
  376.         for xi in [email]0...@map.width[/email]
  377.           tile_id = @map.data[xi, yi, i]
  378.           next if tile_id == 0
  379.           pri = $data_tilesets[@map.tileset_id].priorities[tile_id]
  380.           @data.set(xi,yi,pri,MapViewMas.new(i, tile_id))
  381.           case tile_id
  382.           when 0x30...0x180 # オートタイル
  383.             at_name = @tileset.autotile_names[(tile_id / 0x30) - 1]
  384.             next if at_name == ""
  385.             cache_b = RPG::Cache.autotile(at_name)
  386.             next if (cache_b.width / 96) < 2 # アニメーションなし
  387.             @at.set_point(xi, yi, i)
  388.           end
  389.         end
  390.       end
  391.     end
  392.     # イベント
  393.     for ev in @events
  394.       if ev.always_on_top
  395.         pri = 8
  396.       elsif ev.tile_id == 0
  397.         b = RPG::Cache.character(ev.character_name, ev.character_hue)
  398.         if (b.height / 4) > 32 # 高さが32超える
  399.           @data.set(ev.x, ev.y, 7, MapViewMas.new(0, ev.tile_id, ev))
  400.         end
  401.         pri = 6
  402.       else
  403.         pri = $data_tilesets[@map.tileset_id].priorities[ev.tile_id]
  404.       end
  405.       @data.set(ev.x, ev.y, pri, MapViewMas.new(0, ev.tile_id, ev))
  406.     end
  407.   end
  408.   #----------------------------------------------------------------------------
  409.   # ● マップ描画
  410.   #----------------------------------------------------------------------------
  411.   PRI_MAP = [0,6,1,7,2,3,4,5,8]
  412.   def draw_map
  413.     for pri in PRI_MAP
  414.       for yi in [email]0...@map.height[/email]
  415.         for xi in [email]0...@map.width[/email]
  416.           data = @data.get(xi, yi, pri)
  417.           for d in data
  418.             draw_point(xi, yi, d, pri)
  419.           end
  420.         end
  421.       end
  422.     end
  423.   end
  424.   #----------------------------------------------------------------------------
  425.   # ● オートタイル部分の再描画
  426.   #----------------------------------------------------------------------------
  427.   def refresh_autotile
  428.     tmp_pos = []
  429.     # オートタイルを含むマスを消去
  430.     for pos in @at.pos
  431.       tile_id = @map.data[pos.x, pos.y, pos.l]
  432.       at_name = @tileset.autotile_names[(tile_id / 0x30) - 1]
  433.       next if at_name == ""
  434.       cache_b = RPG::Cache.autotile(at_name)
  435.       koma = cache_b.width / 96 # コマ数
  436.       next if koma < 2 # アニメーションなし時は削除不要
  437.       # 次のアニメーションへ
  438.       @at.next_i(pos.x, pos.y, pos.l, koma)
  439.       rect = Rect.new(pos.x*32, pos.y*32, 32, 32)
  440.       @viewsprite.bitmap.fill_rect(rect, Color.new(0, 0, 0, 0))
  441.       tmp_pos.push(MapViewAutotilePos.new(pos.x, pos.y, pos.l))
  442.     end
  443.     # オートタイルのあるマスだけ再描画
  444.     for pos in tmp_pos
  445.       for pri in PRI_MAP
  446.         data = @data.get(pos.x, pos.y, pri)
  447.         for d in data
  448.           draw_point(pos.x, pos.y, d, pri)
  449.         end
  450.       end
  451.     end
  452.   end
  453.   #----------------------------------------------------------------------------
  454.   # ● マス目の描画
  455.   #----------------------------------------------------------------------------
  456.   def draw_point(xi, yi, data, pri)
  457.     case data.tile_id
  458.     when 0x00
  459.       unless data.ev.nil?
  460.         case pri
  461.         when 6; draw_ev_character_btm(data.ev)
  462.         when 7; draw_ev_character_top(data.ev)
  463.         when 8; draw_ev_character(data.ev)
  464.         end
  465.       end
  466.     when 0x01...0x30  # 透明
  467.     when 0x30...0x180 # オートタイル
  468.       draw_autotile((data.tile_id/0x30)-1, data.tile_id%0x30, xi*32, yi*32, @at.anime_i[xi,yi,data.layer])
  469.     else  # タイルセット
  470.       draw_tileset(data.tile_id-384, xi*32, yi*32)
  471.     end
  472.   end
  473.   #----------------------------------------------------------------------------
  474.   # ● オートタイル描画
  475.   #   autotile_index  : オートタイルIndex
  476.   #   ptn_id          : パターンID
  477.   #   x               : 描画位置X
  478.   #   y               : 描画位置Y
  479.   #----------------------------------------------------------------------------
  480.   def draw_autotile(autotile_index, ptn_id, x, y, anime_i=0)
  481.     autotile_name = @tileset.autotile_names[autotile_index]
  482.     return if autotile_name == ""
  483.     draw_autotile_ptn(RPG::Cache.autotile(autotile_name), ptn_id, x, y, anime_i)
  484.   end
  485.   #----------------------------------------------------------------------------
  486.   # ● オートタイルパターン描画
  487.   #----------------------------------------------------------------------------
  488.   AT_A  = 0x00; AT_B  = 0x01; AT_C  = 0x02
  489.   AT_D7 = 0x03; AT_D8 = 0x04; AT_D9 = 0x05
  490.   AT_D4 = 0x06; AT_D5 = 0x07; AT_D6 = 0x08
  491.   AT_D1 = 0x09; AT_D2 = 0x0A; AT_D3 = 0x0B
  492.   def draw_autotile_ptn(cache_b, ptn_id, x, y, anime_i=0)
  493.     case ptn_id
  494.     when 0x00;  draw_autotile_all(cache_b, AT_D5, x, y, anime_i)
  495.     when 0x01;  draw_autotile_h2(cache_b, [AT_C, AT_D5], 0, x, y, anime_i)
  496.                 draw_autotile_h(cache_b, AT_D5, 1, x, y, anime_i)
  497.     when 0x02;  draw_autotile_h2(cache_b, [AT_D5, AT_C], 0, x, y, anime_i)
  498.                 draw_autotile_h(cache_b, AT_D5, 1, x, y, anime_i)
  499.     when 0x03;  draw_autotile_h(cache_b, AT_C , 0, x, y, anime_i)
  500.                 draw_autotile_h(cache_b, AT_D5, 1, x, y, anime_i)
  501.     when 0x04;  draw_autotile_h(cache_b, AT_D5, 0, x, y, anime_i)
  502.                 draw_autotile_h2(cache_b, [AT_D5, AT_C], 1, x, y, anime_i)
  503.     when 0x05;  draw_autotile_4(cache_b, [AT_C, AT_D5, AT_D5, AT_C], x, y, anime_i)
  504.     when 0x06;  draw_autotile_v(cache_b, AT_D5, 0, x, y, anime_i)
  505.                 draw_autotile_v(cache_b, AT_C , 1, x, y, anime_i)
  506.     when 0x07;  draw_autotile_h(cache_b, AT_C , 0, x, y, anime_i)
  507.                 draw_autotile_h2(cache_b, [AT_D5, AT_C], 1, x, y, anime_i)
  508.     when 0x08;  draw_autotile_h(cache_b, AT_D5, 0, x, y, anime_i)
  509.                 draw_autotile_h2(cache_b, [AT_C, AT_D5], 1, x, y, anime_i)
  510.     when 0x09;  draw_autotile_v(cache_b, AT_C , 0, x, y, anime_i)
  511.                 draw_autotile_v(cache_b, AT_D5, 1, x, y, anime_i)
  512.     when 0x0A;  draw_autotile_4(cache_b, [AT_D5, AT_C , AT_C , AT_D5], x, y, anime_i)
  513.     when 0x0B;  draw_autotile_h(cache_b, AT_C , 0, x, y, anime_i)
  514.                 draw_autotile_h2(cache_b, [AT_C , AT_D5], 1, x, y, anime_i)
  515.     when 0x0C;  draw_autotile_h(cache_b, AT_D5, 0, x, y, anime_i)
  516.                 draw_autotile_h(cache_b, AT_C , 1, x, y, anime_i)
  517.     when 0x0D;  draw_autotile_h2(cache_b, [AT_C , AT_D5], 0, x, y, anime_i)
  518.                 draw_autotile_h(cache_b, AT_C , 1, x, y, anime_i)
  519.     when 0x0E;  draw_autotile_h2(cache_b, [AT_D5, AT_C ], 0, x, y, anime_i)
  520.                 draw_autotile_h(cache_b, AT_C , 1, x, y, anime_i)
  521.     when 0x0F;  draw_autotile_all(cache_b, AT_C, x, y, anime_i)
  522.     when 0x10;  draw_autotile_all(cache_b, AT_D4, x, y, anime_i)
  523.     when 0x11;  draw_autotile_h2(cache_b, [AT_D4, AT_C ], 0, x, y, anime_i)
  524.                 draw_autotile_h(cache_b, AT_D4, 1, x, y, anime_i)
  525.     when 0x12;  draw_autotile_h(cache_b, AT_D4, 0, x, y, anime_i)
  526.                 draw_autotile_h2(cache_b, [AT_D4, AT_C ], 1, x, y, anime_i)
  527.     when 0x13;  draw_autotile_v(cache_b, AT_D4, 0, x, y, anime_i)
  528.                 draw_autotile_v(cache_b, AT_C , 1, x, y, anime_i)
  529.     when 0x14;  draw_autotile_all(cache_b, AT_D8, x, y, anime_i)
  530.     when 0x15;  draw_autotile_h(cache_b, AT_D8, 0, x, y, anime_i)
  531.                 draw_autotile_h2(cache_b, [AT_D8, AT_C ], 1, x, y, anime_i)
  532.     when 0x16;  draw_autotile_h(cache_b, AT_D8, 0, x, y, anime_i)
  533.                 draw_autotile_h2(cache_b, [AT_C , AT_D8], 1, x, y, anime_i)
  534.     when 0x17;  draw_autotile_h(cache_b, AT_D8, 0, x, y, anime_i)
  535.                 draw_autotile_h(cache_b, AT_C , 1, x, y, anime_i)
  536.     when 0x18;  draw_autotile_all(cache_b, AT_D6, x, y, anime_i)
  537.     when 0x19;  draw_autotile_h(cache_b, AT_D6, 0, x, y, anime_i)
  538.                 draw_autotile_h2(cache_b, [AT_C , AT_D6], 1, x, y, anime_i)
  539.     when 0x1A;  draw_autotile_h2(cache_b, [AT_C , AT_D6], 0, x, y, anime_i)
  540.                 draw_autotile_h(cache_b, AT_D6, 1, x, y, anime_i)
  541.     when 0x1B;  draw_autotile_v(cache_b, AT_C , 0, x, y, anime_i)
  542.                 draw_autotile_v(cache_b, AT_D6, 1, x, y, anime_i)
  543.     when 0x1C;  draw_autotile_all(cache_b, AT_D2, x, y, anime_i)
  544.     when 0x1D;  draw_autotile_h2(cache_b, [AT_C , AT_D2], 0, x, y, anime_i)
  545.                 draw_autotile_h(cache_b, AT_D2, 1, x, y, anime_i)
  546.     when 0x1E;  draw_autotile_h2(cache_b, [AT_D2, AT_C ], 0, x, y, anime_i)
  547.                 draw_autotile_h(cache_b, AT_D2, 1, x, y, anime_i)
  548.     when 0x1F;  draw_autotile_h(cache_b, AT_C , 0, x, y, anime_i)
  549.                 draw_autotile_h(cache_b, AT_D2, 1, x, y, anime_i)
  550.     when 0x20;  draw_autotile_v(cache_b, AT_D4, 0, x, y, anime_i)
  551.                 draw_autotile_v(cache_b, AT_D6, 1, x, y, anime_i)
  552.     when 0x21;  draw_autotile_h(cache_b, AT_D8, 0, x, y, anime_i)
  553.                 draw_autotile_h(cache_b, AT_D2, 1, x, y, anime_i)
  554.     when 0x22;  draw_autotile_all(cache_b, AT_D7, x, y, anime_i)
  555.     when 0x23;  draw_autotile_h(cache_b, AT_D7, 0, x, y, anime_i)
  556.                 draw_autotile_h2(cache_b, [AT_D7, AT_C ], 1, x, y, anime_i)
  557.     when 0x24;  draw_autotile_all(cache_b, AT_D9, x, y, anime_i)
  558.     when 0x25;  draw_autotile_h(cache_b, AT_D9, 0, x, y, anime_i)
  559.                 draw_autotile_h2(cache_b, [AT_C , AT_D9], 1, x, y, anime_i)
  560.     when 0x26;  draw_autotile_all(cache_b, AT_D3, x, y, anime_i)
  561.     when 0x27;  draw_autotile_h2(cache_b, [AT_C , AT_D3], 0, x, y, anime_i)
  562.                 draw_autotile_h(cache_b, AT_D3, 1, x, y, anime_i)
  563.     when 0x28;  draw_autotile_all(cache_b, AT_D1, x, y, anime_i)
  564.     when 0x29;  draw_autotile_h2(cache_b, [AT_D1, AT_C ], 0, x, y, anime_i)
  565.                 draw_autotile_h(cache_b, AT_D1, 1, x, y, anime_i)
  566.     when 0x2A;  draw_autotile_v(cache_b, AT_D7, 0, x, y, anime_i)
  567.                 draw_autotile_v(cache_b, AT_D9, 1, x, y, anime_i)
  568.     when 0x2B;  draw_autotile_h(cache_b, AT_D7, 0, x, y, anime_i)
  569.                 draw_autotile_h(cache_b, AT_D1, 1, x, y, anime_i)
  570.     when 0x2C;  draw_autotile_v(cache_b, AT_D1, 0, x, y, anime_i)
  571.                 draw_autotile_v(cache_b, AT_D3, 1, x, y, anime_i)
  572.     when 0x2D;  draw_autotile_h(cache_b, AT_D9, 0, x, y, anime_i)
  573.                 draw_autotile_h(cache_b, AT_D3, 1, x, y, anime_i)
  574.     when 0x2E;  draw_autotile_4(cache_b, [AT_D7, AT_D9, AT_D1, AT_D3], x, y, anime_i)
  575.     when 0x2F;  draw_autotile_all(cache_b, AT_A , x, y, anime_i)
  576.     else; p "err: autotile", sprintf("%#x", ptn_id), x, y, anime_i
  577.     end
  578.   end
  579.   #----------------------------------------------------------------------------
  580.   # ● オートタイルパターン描画 (同一パターン転送)
  581.   #----------------------------------------------------------------------------
  582.   def draw_autotile_all(cache_b, ptn, x, y, anime_i=0)
  583.     xx = (ptn % 3) * 32 + (anime_i * 96)
  584.     yy = (ptn / 3) * 32
  585.     src_rect = Rect.new(xx, yy, 32, 32)
  586.     @viewsprite.bitmap.blt(x, y, cache_b, src_rect)
  587.   end
  588.   #----------------------------------------------------------------------------
  589.   # ● オートタイルパターン描画 (2分割パターン転送)
  590.   #    _h  : 水平 2分割パターンの転送
  591.   #    _v  : 垂直 2分割パターンの転送
  592.   #----------------------------------------------------------------------------
  593.   def draw_autotile_h(cache_b, ptn, ii, x, y, anime_i=0)
  594.     yi = ii * 16
  595.     xx = ((ptn % 3) * 32) + (anime_i * 96)
  596.     yy = ((ptn / 3) * 32)
  597.     src_rect = Rect.new(xx, yy+yi, 32, 16)
  598.     @viewsprite.bitmap.blt(x, y+yi, cache_b, src_rect)
  599.   end
  600.   def draw_autotile_v(cache_b, ptn, ii, x, y, anime_i=0)
  601.     xi = ii * 16
  602.     xx = ((ptn % 3) * 32) + (anime_i * 96)
  603.     yy = ((ptn / 3) * 32)
  604.     src_rect = Rect.new(xx+xi, yy, 16, 32)
  605.     @viewsprite.bitmap.blt(x+xi, y, cache_b, src_rect)
  606.   end
  607.   #----------------------------------------------------------------------------
  608.   # ● オートタイルパターン描画 (4分割*2パターン転送)
  609.   #    _h2  : 水平 4分割*2パターンの転送
  610.   #    _v2  : 垂直 4分割*2パターンの転送
  611.   #----------------------------------------------------------------------------
  612.   def draw_autotile_h2(cache_b, ptn, ii, x, y, anime_i=0)
  613.     yi = ii * 16
  614.     for i in 0..1
  615.       xi = (i % 2) * 16
  616.       xx = ((ptn[i] % 3) * 32) + (anime_i * 96)
  617.       yy = ((ptn[i] / 3) * 32)
  618.       src_rect = Rect.new(xx+xi, yy+yi, 16, 16)
  619.       @viewsprite.bitmap.blt(x+xi, y+yi, cache_b, src_rect)
  620.     end
  621.   end
  622.   def draw_autotile_v2(cache_b, ptn, ii, x, y, anime_i=0)
  623.     xi = ii * 16
  624.     for i in 0..1
  625.       yi = (i / 2) * 16
  626.       xx = ((ptn[i] % 3) * 32) + (anime_i * 96)
  627.       yy = ((ptn[i] / 3) * 32)
  628.       src_rect = Rect.new(xx+xi, yy+yi, 16, 16)
  629.       @viewsprite.bitmap.blt(x+xi, y+yi, cache_b, src_rect)
  630.     end
  631.   end
  632.   #----------------------------------------------------------------------------
  633.   # ● オートタイルパターン描画 (4分割*4パターン転送)
  634.   #----------------------------------------------------------------------------
  635.   def draw_autotile_4(cache_b, ptn, x, y, anime_i=0)
  636.     for i in 0..3
  637.       xi = (i % 2) * 16
  638.       yi = (i / 2) * 16
  639.       xx = ((ptn[i] % 3) * 32) + (anime_i * 96)
  640.       yy = ((ptn[i] / 3) * 32)
  641.       src_rect = Rect.new(xx+xi, yy+yi, 16, 16)
  642.       @viewsprite.bitmap.blt(x+xi, y+yi, cache_b, src_rect)
  643.     end
  644.   end
  645.   #----------------------------------------------------------------------------
  646.   # ● タイルセット描画
  647.   #   pri    : プライオリティ
  648.   #   index  : タイルセットIndex
  649.   #   x      : 描画位置X
  650.   #   y      : 描画位置Y
  651.   #----------------------------------------------------------------------------
  652.   def draw_tileset(index, x, y)
  653.     cache_b = RPG::Cache.tileset(@tileset.tileset_name)
  654.     xx = (index % 8) * 32
  655.     yy = (index / 8) * 32
  656.     src_rect = Rect.new(xx, yy, 32, 32)
  657.     @viewsprite.bitmap.blt(x, y, cache_b, src_rect)
  658.   end
  659.   #----------------------------------------------------------------------------
  660.   # ● イベントキャラクター描画
  661.   #----------------------------------------------------------------------------
  662.   def draw_ev_character(ev)
  663.     b = RPG::Cache.character(ev.character_name, ev.character_hue)
  664.     cw = b.width / 4
  665.     ch = b.height / 4
  666.     sx = ev.pattern * cw
  667.     sy = (ev.direction - 2) / 2 * ch
  668.     w = (cw - 32) / 2
  669.     h = ch - 32
  670.     src_rect = Rect.new(sx, sy, cw, ch)
  671.     @viewsprite.bitmap.blt(ev.x*32-w, ev.y*32-h, b, src_rect, ev.opacity)
  672.   end
  673.   #----------------------------------------------------------------------------
  674.   # ● イベントキャラクター描画(下 32px)
  675.   #----------------------------------------------------------------------------
  676.   def draw_ev_character_btm(ev)
  677.     b = RPG::Cache.character(ev.character_name, ev.character_hue)
  678.     cw = b.width / 4
  679.     ch = b.height / 4
  680.     sx = ev.pattern * cw
  681.     sy = (ev.direction - 2) / 2 * ch
  682.     w = (cw - 32) / 2
  683.     src_rect = Rect.new(sx, sy+(ch-32), cw, 32)
  684.     @viewsprite.bitmap.blt(ev.x*32-w, ev.y*32, b, src_rect, ev.opacity)
  685.   end
  686.   #----------------------------------------------------------------------------
  687.   # ● イベントキャラクター描画(上)
  688.   #----------------------------------------------------------------------------
  689.   def draw_ev_character_top(ev)
  690.     b = RPG::Cache.character(ev.character_name, ev.character_hue)
  691.     cw = b.width / 4
  692.     ch = b.height / 4
  693.     sx = ev.pattern * cw
  694.     sy = (ev.direction - 2) / 2 * ch
  695.     w = (cw - 32) / 2
  696.     h = ch - 32
  697.     src_rect = Rect.new(sx, sy, cw, ch-32)
  698.     @viewsprite.bitmap.blt(ev.x*32-w, ev.y*32-h, b, src_rect, ev.opacity)
  699.   end
  700.   #----------------------------------------------------------------------------
  701.   # ● フレーム更新
  702.   #----------------------------------------------------------------------------
  703.   def update
  704.     update_filter if @mini
  705.     @player.update unless @player.nil?
  706.     update_autotile if @auto_tile
  707.   end
  708.   #----------------------------------------------------------------------------
  709.   # ● オートタイルのアニメーション
  710.   #----------------------------------------------------------------------------
  711.   def update_autotile
  712.     @time += 1
  713.     if @time == 16
  714.       refresh_autotile
  715.       @time = 0
  716.     end
  717.   end
  718.   #----------------------------------------------------------------------------
  719.   # ● マップのピックアップ位置の補正
  720.   #----------------------------------------------------------------------------
  721.   def cur_pos_x
  722.     return ((@map_id == $game_map.map_id) ? $game_player.x : (@map.width / 2).truncate)
  723.   end
  724.   def cur_pos_y
  725.     return ((@map_id == $game_map.map_id) ? $game_player.y : (@map.height / 2).truncate)
  726.   end
  727.   #----------------------------------------------------------------------------
  728.   # ● マップのピックアップ位置の補正
  729.   #----------------------------------------------------------------------------
  730.   def update_filter
  731.     c_x = (v_w / 2 - 16.0) / @zoom
  732.     c_y = (v_h / 2 - 16.0) / @zoom
  733.     max_x = r_w - v_w / @zoom
  734.     max_y = r_h - v_h / @zoom
  735.     p_x = cur_pos_x * 32
  736.     p_y = cur_pos_y * 32
  737.     @viewsprite.ox = [0, [p_x - c_x, max_x].min].max
  738.     @viewsprite.oy = [0, [p_y - c_y, max_y].min].max
  739.     # キャラクター位置更新
  740.     unless @player.nil?
  741.       @player.x = @viewsprite.x + p_x * @zoom
  742.       @player.y = @viewsprite.y + p_y * @zoom
  743.       @player.ox = @viewsprite.ox
  744.       @player.oy = @viewsprite.oy
  745.     end
  746.   end
  747.   #--------------------------------------------------------------------------
  748.   # ● フルビュー化
  749.   #--------------------------------------------------------------------------
  750.   def full
  751.     if MapView::F_MAP_ZOOM != 0
  752.       if @zoom == MapView::F_MAP_ZOOM
  753.         ajust_zoom
  754.       else
  755.         self.zoom = MapView::F_MAP_ZOOM
  756.       end
  757.       ajust_pos
  758.       update_filter
  759.     end
  760.   end
  761.   #--------------------------------------------------------------------------
  762.   # ● ズームイン
  763.   #--------------------------------------------------------------------------
  764.   def zoomin
  765.     org_zoom = @zoom
  766.     new_zoom = [0.1, org_zoom - 0.02].max
  767.     self.zoom = new_zoom
  768.     if MapView::F_MAP_ZOOM > new_zoom and (z_w <= v_w and z_h <= v_h)
  769.       self.zoom = org_zoom
  770.       return false    # 画面より小さくなるときは無視
  771.     end
  772.     ajust_pos
  773.     update_filter
  774.     return (org_zoom != @zoom)
  775.   end
  776.   #--------------------------------------------------------------------------
  777.   # ● ズームアウト
  778.   #--------------------------------------------------------------------------
  779.   def zoomout
  780.     org_zoom = @zoom
  781.     self.zoom = [1.0, @zoom + 0.02].min
  782.     ajust_pos
  783.     update_filter
  784.     return (org_zoom != @zoom)
  785.   end
  786. end
  787.  
  788.  
  789. #==============================================================================
  790. # ■ Sprite_MapViewName : フルビュー用マップ名表示ウィンドウ
  791. #==============================================================================
  792. class Window_MapViewName < Window_Base
  793.   #--------------------------------------------------------------------------
  794.   # ● オブジェクト初期化
  795.   #--------------------------------------------------------------------------
  796.   def initialize(map_id)
  797.     n = MapView::F_MAP_RECT_N
  798.     m = MapView::F_MAP_RECT_M
  799.     w = MapView::F_MAP_RECT_W
  800.     h = MapView::F_MAP_RECT_H
  801.     case MapView::F_MAP_FIT
  802.     when 1; rect = Rect.new(      n, 480-h-m, w, h)
  803.     when 3; rect = Rect.new(640-w-n, 480-h-m, w, h)
  804.     when 7; rect = Rect.new(      n,       m, w, h)
  805.     when 9; rect = Rect.new(640-w-n,       m, w, h)
  806.     else;   rect = Rect.new(640-w-n, 480-h-m, w, h)
  807.     end
  808.     super(rect.x, rect.y, rect.width, rect.height)
  809.     self.contents = Bitmap.new(width - 32, height - 32)
  810.     self.back_opacity = 128
  811.     @map_id = map_id < 0 ? $game_map.map_id : map_id
  812.     @mapInfo = load_data(sprintf("Data/MapInfos.rxdata"))
  813.     refresh
  814.   end
  815.   #--------------------------------------------------------------------------
  816.   # ● リフレッシュ
  817.   #--------------------------------------------------------------------------
  818.   def refresh
  819.     self.contents.clear
  820.     self.contents.draw_text(0, 0, self.contents.width, 32, MapView.map_name(@mapInfo, @map_id))
  821.   end
  822. end
  823.  
  824. #==============================================================================
  825. # ■ Sprite_MapViewName : フルビュー用マップ名表示スプライト
  826. #==============================================================================
  827. class Sprite_MapViewName < Sprite
  828.   #--------------------------------------------------------------------------
  829.   # ● オブジェクト初期化
  830.   #--------------------------------------------------------------------------
  831.   def initialize(map_id)
  832.     b = RPG::Cache.windowskin(MapView::F_MAP_NAME_BG)
  833.     n = MapView::F_MAP_RECT_N
  834.     m = MapView::F_MAP_RECT_M
  835.     case MapView::F_MAP_FIT
  836.     when 1; rect = Rect.new(            n, 480-b.height-m, b.width, b.height)
  837.     when 3; rect = Rect.new(640-b.width-n, 480-b.height-m, b.width, b.height)
  838.     when 7; rect = Rect.new(            n,              m, b.width, b.height)
  839.     when 9; rect = Rect.new(640-b.width-n,              m, b.width, b.height)
  840.     else;   rect = Rect.new(640-b.width-n, 480-b.height-m, b.width, b.height)
  841.     end
  842.     @viewport = Viewport.new(rect)
  843.     @viewport.z = 200
  844.     super(@viewport)
  845.     self.bitmap = Bitmap.new(b.width, b.height)
  846.     @map_id = map_id < 0 ? $game_map.map_id : map_id
  847.     @mapInfo = load_data(sprintf("Data/MapInfos.rxdata"))
  848.     refresh
  849.   end
  850.   #--------------------------------------------------------------------------
  851.   # ● オブジェクト開放
  852.   #--------------------------------------------------------------------------
  853.   def dispose
  854.     super
  855.     @viewport.dispose
  856.   end
  857.   #--------------------------------------------------------------------------
  858.   # ● リフレッシュ
  859.   #--------------------------------------------------------------------------
  860.   def refresh
  861.     self.bitmap.clear
  862.     b = RPG::Cache.windowskin(MapView::F_MAP_NAME_BG)
  863.     self.bitmap.blt(0,0,b,Rect.new(0,0,b.width,b.height))
  864.     self.bitmap.draw_text(16, 0, self.bitmap.width, 32, MapView.map_name(@mapInfo, @map_id))
  865.   end
  866. end
  867.  
  868. if MapView::USE_MINIMAP
  869. #==============================================================================
  870. # ■ Game_System
  871. #==============================================================================
  872. class Game_System
  873.   attr_accessor :miniview     # ミニマップ表示状態(EV)
  874.   attr_accessor :miniview_usr # ミニマップ表示状態(User操作)
  875.   #--------------------------------------------------------------------------
  876.   # ● オブジェクト初期化
  877.   #--------------------------------------------------------------------------
  878.   alias init_mapview initialize
  879.   def initialize
  880.     init_mapview
  881.     @miniview = @miniview_usr = true
  882.   end
  883. end
  884. #==============================================================================
  885. # ■ Interpreter
  886. #==============================================================================
  887. class Interpreter
  888.   #--------------------------------------------------------------------------
  889.   # ● ミニマップの表示ON/OFF
  890.   #--------------------------------------------------------------------------
  891.   def minimap(flag)
  892.     return true unless $scene.is_a?(Scene_Map)
  893.     $scene.spriteset.minimap(flag)
  894.     return true
  895.   end
  896.   #--------------------------------------------------------------------------
  897.   # ● ミニマップの再描画
  898.   #--------------------------------------------------------------------------
  899.   def refresh_minimap
  900.     return true unless $scene.is_a?(Scene_Map)
  901.     $scene.spriteset.refresh_minimap
  902.     return true
  903.   end
  904. end
  905. #==============================================================================
  906. # ■ Scene_Map
  907. #==============================================================================
  908. class Scene_Map
  909.   attr_reader :spriteset
  910. end
  911. #==============================================================================
  912. # ■ Spriteset_Map
  913. #==============================================================================
  914. class Spriteset_Map
  915.   #--------------------------------------------------------------------------
  916.   # ● ミニマップの表示ON/OFF(user状態も上書き)
  917.   #--------------------------------------------------------------------------
  918.   def minimap(flag)
  919.     return if @mapview.nil?
  920.     @mapview.visible = $game_system.miniview = $game_system.miniview_usr = flag
  921.   end
  922.   #--------------------------------------------------------------------------
  923.   # ● ミニマップの表示ON/OFF(user操作, EVロックされている場合は無視)
  924.   #--------------------------------------------------------------------------
  925.   def mapview_user
  926.     return false if @mapview.nil?
  927.     return false unless $game_system.miniview
  928.     @mapview.visible = $game_system.miniview_usr = !$game_system.miniview_usr
  929.     return true
  930.   end
  931.   #--------------------------------------------------------------------------
  932.   # ● ミニマップの再描画
  933.   #--------------------------------------------------------------------------
  934.   def refresh_minimap
  935.     return if @mapview.nil?
  936.     @mapview.refresh
  937.   end
  938.   #--------------------------------------------------------------------------
  939.   # ● オブジェクト初期化
  940.   #--------------------------------------------------------------------------
  941.   alias init_mapview initialize
  942.   def initialize
  943.     init_mapview
  944.     v = (MapView.mc_visible? and $game_system.miniview and $game_system.miniview_usr)
  945.     @mapview = v ? Sprite_MapView.new(MapViewMini.new) : nil
  946.   end
  947.   #--------------------------------------------------------------------------
  948.   # ● 解放
  949.   #--------------------------------------------------------------------------
  950.   alias dispose_mapview dispose
  951.   def dispose
  952.     dispose_mapview
  953.     @mapview.dispose unless @mapview.nil?
  954.   end
  955.   #--------------------------------------------------------------------------
  956.   # ● フレーム更新
  957.   #--------------------------------------------------------------------------
  958.   alias update_mapview update
  959.   def update
  960.     update_mapview
  961.     @mapview.update unless @mapview.nil?
  962.   end
  963. end
  964. end # if MapView::USE_MINIMAP
  965.  
  966.  
  967. if MapView::USE_M_MAP_DIRECT or MapView::USE_F_MAP_DIRECT
  968. #==============================================================================
  969. # ■ Game_Temp
  970. #==============================================================================
  971. class Game_Temp
  972.   #--------------------------------------------------------------------------
  973.   # ● 公開インスタンス変数
  974.   #--------------------------------------------------------------------------
  975.   attr_accessor :mapview_calling           # マップビュー 呼び出しフラグ
  976.   #--------------------------------------------------------------------------
  977.   # ● オブジェクト初期化
  978.   #--------------------------------------------------------------------------
  979.   alias init_mapview initialize
  980.   def initialize
  981.     init_mapview
  982.     @mapview_calling = false
  983.   end
  984. end
  985. #==============================================================================
  986. # ■ Scene_Map
  987. #==============================================================================
  988. class Scene_Map
  989.   #--------------------------------------------------------------------------
  990.   # ● フレーム更新
  991.   #--------------------------------------------------------------------------
  992.   def update
  993.     # ループ
  994.     loop do
  995.       # マップ、インタプリタ、プレイヤーの順に更新
  996.       # (この更新順序は、イベントを実行する条件が満たされているときに
  997.       #  プレイヤーに一瞬移動する機会を与えないなどの理由で重要)
  998.       $game_map.update
  999.       $game_system.map_interpreter.update
  1000.       $game_player.update
  1001.       # システム (タイマー)、画面を更新
  1002.       $game_system.update
  1003.       $game_screen.update
  1004.       # プレイヤーの場所移動中でなければループを中断
  1005.       unless $game_temp.player_transferring
  1006.         break
  1007.       end
  1008.       # 場所移動を実行
  1009.       transfer_player
  1010.       # トランジション処理中の場合、ループを中断
  1011.       if $game_temp.transition_processing
  1012.         break
  1013.       end
  1014.     end
  1015.     # スプライトセットを更新
  1016.     @spriteset.update
  1017.     # メッセージウィンドウを更新
  1018.     @message_window.update
  1019.     # ゲームオーバーの場合
  1020.     if $game_temp.gameover
  1021.       # ゲームオーバー画面に切り替え
  1022.       $scene = Scene_Gameover.new
  1023.       return
  1024.     end
  1025.     # タイトル画面に戻す場合
  1026.     if $game_temp.to_title
  1027.       # タイトル画面に切り替え
  1028.       $scene = Scene_Title.new
  1029.       return
  1030.     end
  1031.     # トランジション処理中の場合
  1032.     if $game_temp.transition_processing
  1033.       # トランジション処理中フラグをクリア
  1034.       $game_temp.transition_processing = false
  1035.       # トランジション実行
  1036.       if $game_temp.transition_name == ""
  1037.         Graphics.transition(20)
  1038.       else
  1039.         Graphics.transition(40, "Graphics/Transitions/" +
  1040.           $game_temp.transition_name)
  1041.       end
  1042.     end
  1043.     # メッセージウィンドウ表示中の場合
  1044.     if $game_temp.message_window_showing
  1045.       return
  1046.     end
  1047.     return if update_mapview  # MapView切り替え検出(この行だけ追加)
  1048.     # エンカウント カウントが 0 で、エンカウントリストが空ではない場合
  1049.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  1050.       # イベント実行中かエンカウント禁止中でなければ
  1051.       unless $game_system.map_interpreter.running? or
  1052.              $game_system.encounter_disabled
  1053.         # トループを決定
  1054.         n = rand($game_map.encounter_list.size)
  1055.         troop_id = $game_map.encounter_list[n]
  1056.         # トループが有効なら
  1057.         if $data_troops[troop_id] != nil
  1058.           # バトル呼び出しフラグをセット
  1059.           $game_temp.battle_calling = true
  1060.           $game_temp.battle_troop_id = troop_id
  1061.           $game_temp.battle_can_escape = true
  1062.           $game_temp.battle_can_lose = false
  1063.           $game_temp.battle_proc = nil
  1064.         end
  1065.       end
  1066.     end
  1067.     # B ボタンが押された場合
  1068.     if Input.trigger?(Input::B)
  1069.       # イベント実行中かメニュー禁止中でなければ
  1070.       unless $game_system.map_interpreter.running? or
  1071.              $game_system.menu_disabled
  1072.         # メニュー呼び出しフラグと SE 演奏フラグをセット
  1073.         $game_temp.menu_calling = true
  1074.         $game_temp.menu_beep = true
  1075.       end
  1076.     end
  1077.     # デバッグモードが ON かつ F9 キーが押されている場合
  1078.     if $DEBUG and Input.press?(Input::F9)
  1079.       # デバッグ呼び出しフラグをセット
  1080.       $game_temp.debug_calling = true
  1081.     end
  1082.     # プレイヤーの移動中ではない場合
  1083.     unless $game_player.moving?
  1084.       # 各種画面の呼び出しを実行
  1085.       if $game_temp.battle_calling
  1086.         call_battle
  1087.       elsif $game_temp.shop_calling
  1088.         call_shop
  1089.       elsif $game_temp.name_calling
  1090.         call_name
  1091.       elsif $game_temp.menu_calling
  1092.         call_menu
  1093.       elsif $game_temp.save_calling
  1094.         call_save
  1095.       elsif $game_temp.debug_calling
  1096.         call_debug
  1097.       end
  1098.     end
  1099.   end
  1100.   #--------------------------------------------------------------------------
  1101.   # ● フレーム更新(MapView用)
  1102.   #--------------------------------------------------------------------------
  1103.   def update_mapview
  1104.     return false if $game_system.map_interpreter.running?
  1105.     # ミニマップ切り替え
  1106.     if MapView::USE_MINIMAP and MapView::USE_M_MAP_DIRECT and Input.trigger?(MapView::M_MAP_D_KEY)
  1107.       if MapView.fc_visible? and $game_system.miniview and @spriteset.mapview_user
  1108.         $game_system.se_play($data_system.decision_se)
  1109.       else
  1110.         $game_system.se_play($data_system.buzzer_se)
  1111.       end
  1112.     end
  1113.     # フルビュー切り替え
  1114.     if MapView::USE_F_MAP_DIRECT and Input.trigger?(MapView::F_MAP_D_KEY)
  1115.       $game_temp.mapview_calling = true
  1116.       return false
  1117.     elsif $game_temp.mapview_calling and !$game_player.moving?
  1118.       $game_temp.mapview_calling = false
  1119.       if MapView.fc_visible?
  1120.         $game_system.se_play($data_system.decision_se)
  1121.         $scene = Scene_MapView.new
  1122.         $scene.direct
  1123.         return true # シーン切り替えさせる
  1124.       else
  1125.         $game_system.se_play($data_system.buzzer_se)
  1126.         return false
  1127.       end
  1128.     end
  1129.     return false
  1130.   end
  1131. end
  1132. end # if MapView::USE_M_MAP_DIRECT or MapView::USE_F_MAP_DIRECT
  1133.  
  1134.  
  1135. #==============================================================================
  1136. # ■ Scene_MapView : フルビュー用シーンクラス
  1137. #==============================================================================
  1138. class Scene_MapView
  1139.   #--------------------------------------------------------------------------
  1140.   # ● メイン処理
  1141.   #--------------------------------------------------------------------------
  1142.   def initialize(index=-1, map_id=-1)
  1143.     @menu_index = index
  1144.     @map_id = map_id
  1145.     @direct = false
  1146.   end
  1147.   #--------------------------------------------------------------------------
  1148.   # ● 直接呼び出し
  1149.   #--------------------------------------------------------------------------
  1150.   def direct
  1151.     @direct = true
  1152.   end
  1153.   #--------------------------------------------------------------------------
  1154.   # ● メイン処理
  1155.   #--------------------------------------------------------------------------
  1156.   def main
  1157.     start                         # 開始処理
  1158.     Graphics.transition           # トランジション実行
  1159.     loop do
  1160.       Graphics.update             # ゲーム画面を更新
  1161.       Input.update                # 入力情報を更新
  1162.       update                      # フレーム更新
  1163.       break if $scene != self     # 画面が切り替わったらループを中断
  1164.     end
  1165.     Graphics.update
  1166.     Graphics.freeze               # トランジション準備
  1167.     terminate                     # 終了処理
  1168.   end
  1169.   #--------------------------------------------------------------------------
  1170.   # ● 開始処理
  1171.   #--------------------------------------------------------------------------
  1172.   def start
  1173.     @sprite = Sprite_MapView.new(MapViewFull.new(@map_id))
  1174.     if MapView::F_MAP_NAME
  1175.       @name = MapView.map_name_class(@map_id)
  1176.     end
  1177.   end
  1178.   #--------------------------------------------------------------------------
  1179.   # ● 終了処理
  1180.   #--------------------------------------------------------------------------
  1181.   def terminate
  1182.     @name.dispose
  1183.     @sprite.dispose
  1184.   end
  1185.   #----------------------------------------------------------------------------
  1186.   # ● フレーム更新
  1187.   #----------------------------------------------------------------------------
  1188.   def update
  1189.     @sprite.update
  1190.     if Input.repeat?(Input::B)
  1191.       $game_system.se_play($data_system.cancel_se)
  1192.       next_scene
  1193.     elsif Input.repeat?(Input::C)
  1194.       $game_system.se_play($data_system.decision_se)
  1195.       MapView::F_MAP_CHG_FL ? @sprite.full : next_scene
  1196.     elsif @direct and Input.trigger?(MapView::F_MAP_D_KEY)
  1197.       $game_system.se_play($data_system.decision_se)
  1198.       next_scene
  1199.     elsif MapView::F_MAP_ZOOM_IO and Input::repeat?(Input::UP)
  1200.       @sprite.zoomin  #$game_system.se_play(@sprite.zoomin ? $data_system.cursor_se : $data_system.buzzer_se)
  1201.     elsif MapView::F_MAP_ZOOM_IO and Input::repeat?(Input::DOWN)
  1202.       @sprite.zoomout #$game_system.se_play(@sprite.zoomout ? $data_system.cursor_se : $data_system.buzzer_se)
  1203.     end
  1204.   end
  1205.   #----------------------------------------------------------------------------
  1206.   # ● 次のシーン
  1207.   #----------------------------------------------------------------------------
  1208.   def next_scene
  1209.     $scene = (@menu_index < 0) ? Scene_Map.new : Scene_Menu.new(@menu_index)
  1210.   end
  1211. end


   
作者: kuerlulu    时间: 2015-9-7 10:55
事件脚本:
  1. minimap true # 打开小地图
  2. minimap false # 关闭小地图
  3. refresh_minimap # 重绘小地图
复制代码

作者: soulsaga    时间: 2015-9-7 11:28
kuerlulu 发表于 2015-9-7 10:55
事件脚本:

照着测试了一下..还是不显示小地图..




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1