Project1

标题: 如何默认关闭迷你小地图 [打印本页]

作者: 纲·炎    时间: 2013-1-10 19:11
标题: 如何默认关闭迷你小地图
本帖最后由 纲·炎 于 2013-1-10 21:25 编辑

因为做的是事件标题,迷你小地图关闭的时候会一闪而过,请问如何在脚本里面设置,代码如下:
RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 迷你地图 - KMS_MiniMap ◆ VX Ace ◆
  3. #_/    ◇ Last update : 2012/02/12  (TOMY@Kamesoft) ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  追加迷你地图表示机能。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  7.  
  8. #==============================================================================
  9. # ★ 设定项目 - BEGIN Setting ★
  10. #==============================================================================
  11.  
  12. module KMS_MiniMap
  13.   # ◆ 迷你地图表示切换按键
  14.   #  空白则按钮转换无效。
  15.   SWITCH_BUTTON = :Z
  16.  
  17.   # ◆ 迷你地图表示位置和大小 (X, Y, 寛, 高)
  18.   MAP_RECT = Rect.new(364, 20, 160, 120)
  19.   # ◆ 迷你地图 Z 座标
  20.   #  注意:太大可能影响其他东西。
  21.   MAP_Z = 0
  22.   # ◆ 1格大小
  23.   # 推荐 3 以上。
  24.   GRID_SIZE = 5
  25.  
  26.   # ◆ 迷你地图顔色
  27.   FOREGROUND_COLOR = Color.new(192, 192, 224, 160)  # 前景色 (通行可)
  28.   BACKGROUND_COLOR = Color.new(  0,   0, 160, 160)  # 背景色 (通行不可)
  29.   POSITION_COLOR   = Color.new(255,   0,   0, 192)  # 现在位置
  30.   MOVE_EVENT_COLOR = Color.new(255, 160,   0, 192)  # 地图移动事件
  31.   VEHICLE_COLOR    = Color.new( 96, 128,   0, 192)  # 载物
  32.  
  33.   # ◆ 物件顔色
  34.   #  按顺序OBJ1, OBJ2,... 对应。
  35.   OBJECT_COLOR = [
  36.     Color.new(  0, 128,   0, 192),  # OBJ 1
  37.     Color.new(  0, 160, 160, 192),  # OBJ 2
  38.     Color.new(160,   0, 160, 192),  # OBJ 3
  39.   ]  # ← 这个]不能消去!
  40.  
  41.   # ◆ 图标的闪烁强度
  42.   # 推荐 5 ~ 8 之间。
  43.   BLINK_LEVEL = 7
  44.  
  45.   # ◆ 地图缓存的数量
  46.   #  超越这个数的话,会删除长期间没参照东西。
  47.   CACHE_NUM = 10
  48. end
  49.  
  50. #==============================================================================
  51. # ☆ 设定完成 - END Setting ☆
  52. #==============================================================================
  53.  
  54. $kms_imported = {} if $kms_imported == nil
  55. $kms_imported["MiniMap"] = true
  56.  
  57. module KMS_MiniMap
  58.   # 迷你地图非表示
  59.   REGEX_NO_MINIMAP_NOTE = /<(?:ミニマップ|MINIMAP)\s*(?:非表示|HIDE)>/i
  60.   REGEX_NO_MINIMAP_NAME = /\[NOMAP\]/i
  61.  
  62.   # 障害物
  63.   REGEX_WALL_EVENT = /<(?:ミニマップ|MINIMAP)\s*(?:壁|障害物|WALL)>/i
  64.  
  65.   # 移动事件
  66.   REGEX_MOVE_EVENT = /<(?:ミニマップ|MINIMAP)\s*(?:移动|MOVE)>/i
  67.  
  68.   # 物件
  69.   REGEX_OBJECT = /<(?:ミニマップ|MINIMAP)\s+OBJ(?:ECT)?\s*(\d+)>/i
  70. end
  71.  
  72. # *****************************************************************************
  73.  
  74. #==============================================================================
  75. # □ KMS_Commands
  76. #==============================================================================
  77.  
  78. module KMS_Commands
  79.   module_function
  80.   #--------------------------------------------------------------------------
  81.   # ○ 表示迷你地图
  82.   #--------------------------------------------------------------------------
  83.   def show_minimap
  84.     $game_temp.minimap_manual_visible = true
  85.     $game_system.minimap_show         = true
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ○ 不表示迷你地图
  89.   #--------------------------------------------------------------------------
  90.   def hide_minimap
  91.     $game_system.minimap_show = false
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ○ 迷你地图表示状态取得
  95.   #--------------------------------------------------------------------------
  96.   def minimap_showing?
  97.     return $game_system.minimap_show
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ○ 刷新迷你地图
  101.   #--------------------------------------------------------------------------
  102.   def refresh_minimap
  103.     return unless SceneManager.scene_is?(Scene_Map)
  104.  
  105.     $game_map.refresh if $game_map.need_refresh
  106.     SceneManager.scene.refresh_minimap
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ○ 更新迷你地图对象
  110.   #--------------------------------------------------------------------------
  111.   def update_minimap_object
  112.     return unless SceneManager.scene_is?(Scene_Map)
  113.  
  114.     $game_map.refresh if $game_map.need_refresh
  115.     SceneManager.scene.update_minimap_object
  116.   end
  117. end
  118.  
  119. #==============================================================================
  120. # ■ Game_Interpreter
  121. #==============================================================================
  122.  
  123. class Game_Interpreter
  124.   # 事件指令:直接處理指令
  125.   include KMS_Commands
  126. end
  127.  
  128. #==============================================================================
  129. # ■ RPG::Map
  130. #==============================================================================
  131.  
  132. class RPG::Map
  133.   #--------------------------------------------------------------------------
  134.   # ○ 生成迷你地图缓存
  135.   #--------------------------------------------------------------------------
  136.   def create_minimap_cache
  137.     @__minimap_show = true
  138.  
  139.     note.each_line { |line|
  140.       if line =~ KMS_MiniMap::REGEX_NO_MINIMAP_NOTE  # マップ非表示
  141.         @__minimap_show = false
  142.       end
  143.     }
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ○ 表示迷你地图
  147.   #--------------------------------------------------------------------------
  148.   def minimap_show?
  149.     create_minimap_cache if @__minimap_show.nil?
  150.     return @__minimap_show
  151.   end
  152. end
  153.  
  154. #==============================================================================
  155. # ■ RPG::MapInfo
  156. #==============================================================================
  157.  
  158. class RPG::MapInfo
  159.   #--------------------------------------------------------------------------
  160.   # ● 地图名取得
  161.   #--------------------------------------------------------------------------
  162.   def name
  163.     return @name.gsub(/\[.*\]/) { "" }
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ○ 取得原始地图名
  167.   #--------------------------------------------------------------------------
  168.   def original_name
  169.     return @name
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ○ 生成迷你地图缓存
  173.   #--------------------------------------------------------------------------
  174.   def create_minimap_cache
  175.     @__minimap_show = !(@name =~ KMS_MiniMap::REGEX_NO_MINIMAP_NAME)
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ○ 表示迷你地图
  179.   #--------------------------------------------------------------------------
  180.   def minimap_show?
  181.     create_minimap_cache if @__minimap_show == nil
  182.     return @__minimap_show
  183.   end
  184. end
  185.  
  186. #==============================================================================
  187. # ■ Game_Temp
  188. #==============================================================================
  189.  
  190. class Game_Temp
  191.   #--------------------------------------------------------------------------
  192.   # ○ 公共实例变量
  193.   #--------------------------------------------------------------------------
  194.   attr_accessor :minimap_manual_visible  # 手动切换小地图显示标志
  195.   #--------------------------------------------------------------------------
  196.   # ○ 对象初始化
  197.   #--------------------------------------------------------------------------
  198.   alias initialize_KMS_MiniMap initialize
  199.   def initialize
  200.     initialize_KMS_MiniMap
  201.  
  202.     @minimap_manual_visible = true
  203.   end
  204. end
  205.  
  206. #==============================================================================
  207. # ■ Game_System
  208. #==============================================================================
  209.  
  210. class Game_System
  211.   #--------------------------------------------------------------------------
  212.   # ○ 公开インスタンス変数
  213.   #--------------------------------------------------------------------------
  214.   attr_accessor :minimap_show  # 迷你地图显示标志
  215.   #--------------------------------------------------------------------------
  216.   # ○ 对象初始化
  217.   #--------------------------------------------------------------------------
  218.   alias initialize_KMS_MiniMap initialize
  219.   def initialize
  220.     initialize_KMS_MiniMap
  221.  
  222.     @minimap_show = true
  223.   end
  224. end
  225.  
  226. #==============================================================================
  227. # ■ Game_Map
  228. #==============================================================================
  229.  
  230. class Game_Map
  231.   #--------------------------------------------------------------------------
  232.   # ○ 定数
  233.   #--------------------------------------------------------------------------
  234.   MINIMAP_FADE_NONE = 0  # ミニマップ フェードなし
  235.   MINIMAP_FADE_IN   = 1  # ミニマップ フェードイン
  236.   MINIMAP_FADE_OUT  = 2  # ミニマップ フェードアウト
  237.   #--------------------------------------------------------------------------
  238.   # ○ 公开インスタンス変数
  239.   #--------------------------------------------------------------------------
  240.   attr_accessor :minimap_fade
  241.   #--------------------------------------------------------------------------
  242.   # ○ ミニマップを表示するか
  243.   #--------------------------------------------------------------------------
  244.   def minimap_show?
  245.     return $data_mapinfos[map_id].minimap_show? && @map.minimap_show?
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ○ ミニマップをフェードイン
  249.   #--------------------------------------------------------------------------
  250.   def fadein_minimap
  251.     @minimap_fade = MINIMAP_FADE_IN
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ○ ミニマップをフェードアウト
  255.   #--------------------------------------------------------------------------
  256.   def fadeout_minimap
  257.     @minimap_fade = MINIMAP_FADE_OUT
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● リフレッシュ
  261.   #--------------------------------------------------------------------------
  262.   alias refresh_KMS_MiniMap refresh
  263.   def refresh
  264.     refresh_KMS_MiniMap
  265.  
  266.     SceneManager.scene.refresh_minimap if SceneManager.scene_is?(Scene_Map)
  267.   end
  268. end
  269.  
  270. #==============================================================================
  271. # ■ Game_Event
  272. #==============================================================================
  273.  
  274. class Game_Event < Game_Character
  275.   #--------------------------------------------------------------------------
  276.   # ○ ミニマップ用のキャッシュを作成
  277.   #--------------------------------------------------------------------------
  278.   def __create_minimap_cache
  279.     @__last_page = @page
  280.     @__minimap_wall_event  = false
  281.     @__minimap_move_event  = false
  282.     @__minimap_object_type = -1
  283.  
  284.     return if @page.nil?
  285.  
  286.     @page.list.each { |cmd|
  287.       # 注釈以外に到达したら离脱
  288.       break unless [108, 408].include?(cmd.code)
  289.  
  290.       # 正规表现判定
  291.       case cmd.parameters[0]
  292.       when KMS_MiniMap::REGEX_WALL_EVENT
  293.         @__minimap_wall_event = true
  294.       when KMS_MiniMap::REGEX_MOVE_EVENT
  295.         @__minimap_move_event = true
  296.       when KMS_MiniMap::REGEX_OBJECT
  297.         @__minimap_object_type = $1.to_i
  298.       end
  299.     }
  300.   end
  301.   private :__create_minimap_cache
  302.   #--------------------------------------------------------------------------
  303.   # ○ グラフィックがあるか
  304.   #--------------------------------------------------------------------------
  305.   def graphic_exist?
  306.     return (character_name != "" || tile_id > 0)
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ○ 障害物か
  310.   #--------------------------------------------------------------------------
  311.   def is_minimap_wall_event?
  312.     if @__minimap_wall_event.nil? || @__last_page != @page
  313.       __create_minimap_cache
  314.     end
  315.  
  316.     return @__minimap_wall_event
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ○ 移动イベントか
  320.   #--------------------------------------------------------------------------
  321.   def is_minimap_move_event?
  322.     if @__minimap_move_event.nil? || @__last_page != @page
  323.       __create_minimap_cache
  324.     end
  325.  
  326.     return @__minimap_move_event
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ○ ミニマップオブジェクトか
  330.   #--------------------------------------------------------------------------
  331.   def is_minimap_object?
  332.     if @__minimap_object_type.nil? || @__last_page != @page
  333.       __create_minimap_cache
  334.     end
  335.  
  336.     return @__minimap_object_type > 0
  337.   end
  338.   #--------------------------------------------------------------------------
  339.   # ○ ミニマップオブジェクトタイプ
  340.   #--------------------------------------------------------------------------
  341.   def minimap_object_type
  342.     if @__minimap_object_type.nil? || @__last_page != @page
  343.       __create_minimap_cache
  344.     end
  345.  
  346.     return @__minimap_object_type
  347.   end
  348. end
  349.  
  350. #==============================================================================
  351. # □ Game_MiniMap
  352. #------------------------------------------------------------------------------
  353. #   ミニマップを扱うクラスです。
  354. #==============================================================================
  355.  
  356. class Game_MiniMap
  357.   #--------------------------------------------------------------------------
  358.   # ○ 构造体
  359.   #--------------------------------------------------------------------------
  360.   Point = Struct.new(:x, :y)
  361.   Size  = Struct.new(:width, :height)
  362.   PassageCache = Struct.new(:map_id, :table, :scan_table)
  363.   #--------------------------------------------------------------------------
  364.   # ○ クラス変数
  365.   #--------------------------------------------------------------------------
  366.   @@passage_cache = []  # 通行フラグテーブルキャッシュ
  367.   #--------------------------------------------------------------------------
  368.   # ● オブジェクト初期化
  369.   #--------------------------------------------------------------------------
  370.   def initialize(tilemap)
  371.     @map_rect  = KMS_MiniMap::MAP_RECT
  372.     @grid_size = [KMS_MiniMap::GRID_SIZE, 1].max
  373.  
  374.     @x = 0
  375.     @y = 0
  376.     @grid_num = Point.new(
  377.       (@map_rect.width  + @grid_size - 1) / @grid_size,
  378.       (@map_rect.height + @grid_size - 1) / @grid_size
  379.     )
  380.     @draw_grid_num    = Point.new(@grid_num.x + 2, @grid_num.y + 2)
  381.     @draw_range_begin = Point.new(0, 0)
  382.     @draw_range_end   = Point.new(0, 0)
  383.     @tilemap = tilemap
  384.  
  385.     @last_x = $game_player.x
  386.     @last_y = $game_player.y
  387.  
  388.     @showing = false
  389.     @hiding  = false
  390.  
  391.     create_sprites
  392.     refresh
  393.  
  394.     unless $game_temp.minimap_manual_visible
  395.       self.opacity = 0
  396.     end
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ○ スプライト作成
  400.   #--------------------------------------------------------------------------
  401.   def create_sprites
  402.     @viewport   = Viewport.new(@map_rect)
  403.     @viewport.z = KMS_MiniMap::MAP_Z
  404.  
  405.     # ビットマップサイズ计算
  406.     @bmp_size = Size.new(
  407.       (@grid_num.x + 2) * @grid_size,
  408.       (@grid_num.y + 2) * @grid_size
  409.     )
  410.     @buf_bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)
  411.  
  412.     # マップ用スプライト作成
  413.     @map_sprite   = Sprite.new(@viewport)
  414.     @map_sprite.x = -@grid_size
  415.     @map_sprite.y = -@grid_size
  416.     @map_sprite.z = 0
  417.     @map_sprite.bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)
  418.  
  419.     # オブジェクト用スプライト作成
  420.     @object_sprite   = Sprite_MiniMapIcon.new(@viewport)
  421.     @object_sprite.x = -@grid_size
  422.     @object_sprite.y = -@grid_size
  423.     @object_sprite.z = 1
  424.     @object_sprite.bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)
  425.  
  426.     # 现在位置スプライト作成
  427.     @position_sprite   = Sprite_MiniMapIcon.new
  428.     @position_sprite.x = @map_rect.x + @grid_num.x / 2 * @grid_size
  429.     @position_sprite.y = @map_rect.y + @grid_num.y / 2 * @grid_size
  430.     @position_sprite.z = @viewport.z + 2
  431.     bitmap = Bitmap.new(@grid_size, @grid_size)
  432.     bitmap.fill_rect(bitmap.rect, KMS_MiniMap::POSITION_COLOR)
  433.     @position_sprite.bitmap = bitmap
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ● 解放
  437.   #--------------------------------------------------------------------------
  438.   def dispose
  439.     @buf_bitmap.dispose
  440.     @map_sprite.bitmap.dispose
  441.     @map_sprite.dispose
  442.     @object_sprite.bitmap.dispose
  443.     @object_sprite.dispose
  444.     @position_sprite.bitmap.dispose
  445.     @position_sprite.dispose
  446.     @viewport.dispose
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ○ 可视状态取得
  450.   #--------------------------------------------------------------------------
  451.   def visible
  452.     return @map_sprite.visible
  453.   end
  454.   #--------------------------------------------------------------------------
  455.   # ○ 可视状态设定
  456.   #--------------------------------------------------------------------------
  457.   def visible=(value)
  458.     @viewport.visible        = value
  459.     @map_sprite.visible      = value
  460.     @object_sprite.visible   = value
  461.     @position_sprite.visible = value
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ○ 不透明度取得
  465.   #--------------------------------------------------------------------------
  466.   def opacity
  467.     return @map_sprite.opacity
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ○ 不透明度设定
  471.   #--------------------------------------------------------------------------
  472.   def opacity=(value)
  473.     @map_sprite.opacity      = value
  474.     @object_sprite.opacity   = value
  475.     @position_sprite.opacity = value
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ○ リフレッシュ
  479.   #--------------------------------------------------------------------------
  480.   def refresh
  481.     update_draw_range
  482.     update_passage_table
  483.     update_object_list
  484.     update_position
  485.     draw_map
  486.     draw_object
  487.     Graphics.frame_reset
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ○ フェードイン
  491.   #--------------------------------------------------------------------------
  492.   def fadein
  493.     @showing = true
  494.     @hiding  = false
  495.   end
  496.   #--------------------------------------------------------------------------
  497.   # ○ フェードアウト
  498.   #--------------------------------------------------------------------------
  499.   def fadeout
  500.     @showing = false
  501.     @hiding  = true
  502.   end
  503.   #--------------------------------------------------------------------------
  504.   # ○ キー入力更新
  505.   #--------------------------------------------------------------------------
  506.   def update_input
  507.     return if KMS_MiniMap::SWITCH_BUTTON.nil?
  508.  
  509.     if Input.trigger?(KMS_MiniMap::SWITCH_BUTTON)
  510.       if opacity < 255 && !@showing
  511.         $game_temp.minimap_manual_visible = true
  512.         fadein
  513.       elsif opacity > 0 && !@hiding
  514.         $game_temp.minimap_manual_visible = false
  515.         fadeout
  516.       end
  517.     end
  518.   end
  519.   #--------------------------------------------------------------------------
  520.   # ○ 描画范囲更新
  521.   #--------------------------------------------------------------------------
  522.   def update_draw_range
  523.     range = []
  524.     (2).times { |i| range[i] = @draw_grid_num[i] / 2 }
  525.  
  526.     @draw_range_begin.x = $game_player.x - range[0]
  527.     @draw_range_begin.y = $game_player.y - range[1]
  528.     @draw_range_end.x   = $game_player.x + range[0]
  529.     @draw_range_end.y   = $game_player.y + range[1]
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ○ 通行可否テーブル更新
  533.   #--------------------------------------------------------------------------
  534.   def update_passage_table
  535.     cache = get_passage_table_cache
  536.     @passage_table      = cache.table
  537.     @passage_scan_table = cache.scan_table
  538.  
  539.     update_around_passage_table
  540.   end
  541.   #--------------------------------------------------------------------------
  542.   # ○ 通行可否テーブルのキャッシュを取得
  543.   #--------------------------------------------------------------------------
  544.   def get_passage_table_cache
  545.     map_id = $game_map.map_id
  546.     cache  = @@passage_cache.find { |c| c.map_id == map_id }
  547.  
  548.     # キャッシュミスしたら新规作成
  549.     if cache == nil
  550.       cache = PassageCache.new(map_id)
  551.       cache.table      = Table.new($game_map.width, $game_map.height)
  552.       cache.scan_table = Table.new(
  553.         ($game_map.width  + @draw_grid_num.x - 1) / @draw_grid_num.x,
  554.         ($game_map.height + @draw_grid_num.y - 1) / @draw_grid_num.y
  555.       )
  556.     end
  557.  
  558.     # 直近のキャッシュは先头に移动し、古いキャッシュは削除
  559.     @@passage_cache.unshift(cache)
  560.     @@passage_cache.delete_at(KMS_MiniMap::CACHE_NUM)
  561.  
  562.     return cache
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ○ 通行可否テーブルのキャッシュをクリア
  566.   #--------------------------------------------------------------------------
  567.   def clear_passage_table_cache
  568.     return if @passage_scan_table == nil
  569.  
  570.     table = @passage_scan_table
  571.     @passage_scan_table = Table.new(table.xsize, table.ysize)
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ○ 通行可否テーブルの探索
  575.   #     x, y : 探索位置
  576.   #--------------------------------------------------------------------------
  577.   def scan_passage(x, y)
  578.     dx = x / @draw_grid_num.x
  579.     dy = y / @draw_grid_num.y
  580.  
  581.     # 探索済み
  582.     return if @passage_scan_table[dx, dy] == 1
  583.  
  584.     # マップ范囲外
  585.     return unless dx.between?(0, @passage_scan_table.xsize - 1)
  586.     return unless dy.between?(0, @passage_scan_table.ysize - 1)
  587.  
  588.     rx = (dx * @draw_grid_num.x)...((dx + 1) * @draw_grid_num.x)
  589.     ry = (dy * @draw_grid_num.y)...((dy + 1) * @draw_grid_num.y)
  590.     mw = $game_map.width  - 1
  591.     mh = $game_map.height - 1
  592.  
  593.     # 探索范囲内の通行テーブルを生成
  594.     rx.each { |x|
  595.       next unless x.between?(0, mw)
  596.       ry.each { |y|
  597.         next unless y.between?(0, mh)
  598.  
  599.         # 通行方向フラグ作成
  600.         # (↓、←、→、↑ の顺に 1, 2, 4, 8 が対応)
  601.         flag = 0
  602.         [2, 4, 6, 8].each{ |d|
  603.           flag |= 1 << (d / 2 - 1) if $game_map.passable?(x, y, d)
  604.         }
  605.         @passage_table[x, y] = flag
  606.       }
  607.     }
  608.     @passage_scan_table[dx, dy] = 1
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ○ 周辺の通行可否テーブル更新
  612.   #--------------------------------------------------------------------------
  613.   def update_around_passage_table
  614.     gx = @draw_grid_num.x
  615.     gy = @draw_grid_num.y
  616.     dx = $game_player.x - gx / 2
  617.     dy = $game_player.y - gy / 2
  618.     scan_passage(dx,      dy)
  619.     scan_passage(dx + gx, dy)
  620.     scan_passage(dx,      dy + gy)
  621.     scan_passage(dx + gx, dy + gy)
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ○ オブジェクト一覧更新
  625.   #--------------------------------------------------------------------------
  626.   def update_object_list
  627.     events = $game_map.events.values
  628.  
  629.     # WALL
  630.     @wall_events = events.find_all { |e| e.is_minimap_wall_event? }
  631.  
  632.     # MOVE
  633.     @move_events = events.find_all { |e| e.is_minimap_move_event? }
  634.  
  635.     # OBJ
  636.     @object_list = events.find_all { |e| e.is_minimap_object? }
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ○ 位置更新
  640.   #--------------------------------------------------------------------------
  641.   def update_position
  642.     # 移动量算出
  643.     pt = Point.new($game_player.x, $game_player.y)
  644.     ox = ($game_player.real_x - pt.x) * @grid_size
  645.     oy = ($game_player.real_y - pt.y) * @grid_size
  646.  
  647.     @viewport.ox = ox
  648.     @viewport.oy = oy
  649.  
  650.     # 移动していたらマップ再描画
  651.     if pt.x != @last_x || pt.y != @last_y
  652.       draw_map
  653.       @last_x = pt.x
  654.       @last_y = pt.y
  655.     end
  656.   end
  657.   #--------------------------------------------------------------------------
  658.   # ○ 描画范囲内判定
  659.   #--------------------------------------------------------------------------
  660.   def in_draw_range?(x, y)
  661.     rb = @draw_range_begin
  662.     re = @draw_range_end
  663.     return (x.between?(rb.x, re.x) && y.between?(rb.y, re.y))
  664.   end
  665.   #--------------------------------------------------------------------------
  666.   # ○ マップ范囲内判定
  667.   #--------------------------------------------------------------------------
  668.   def in_map_range?(x, y)
  669.     mw = $game_map.width
  670.     mh = $game_map.height
  671.     return (x.between?(0, mw - 1) && y.between?(0, mh - 1))
  672.   end
  673.   #--------------------------------------------------------------------------
  674.   # ○ マップ描画
  675.   #--------------------------------------------------------------------------
  676.   def draw_map
  677.     update_around_passage_table
  678.  
  679.     bitmap  = @map_sprite.bitmap
  680.     bitmap.fill_rect(bitmap.rect, KMS_MiniMap::BACKGROUND_COLOR)
  681.  
  682.     draw_map_foreground(bitmap)
  683.     draw_map_move_event(bitmap)
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ○ 通行可能领域の描画
  687.   #--------------------------------------------------------------------------
  688.   def draw_map_foreground(bitmap)
  689.     range_x = (@draw_range_begin.x)..(@draw_range_end.x)
  690.     range_y = (@draw_range_begin.y)..(@draw_range_end.y)
  691.     map_w   = $game_map.width  - 1
  692.     map_h   = $game_map.height - 1
  693.     rect    = Rect.new(0, 0, @grid_size, @grid_size)
  694.  
  695.     range_x.each { |x|
  696.       next unless x.between?(0, map_w)
  697.       range_y.each { |y|
  698.         next unless y.between?(0, map_h)
  699.         next if @passage_table[x, y] == 0
  700.         next if @wall_events.find { |e| e.x == x && e.y == y }  # 壁
  701.  
  702.         # グリッド描画サイズ算出
  703.         rect.set(0, 0, @grid_size, @grid_size)
  704.         rect.x = (x - @draw_range_begin.x) * @grid_size
  705.         rect.y = (y - @draw_range_begin.y) * @grid_size
  706.         flag = @passage_table[x, y]
  707.         if flag & 0x01 == 0  # 下通行不能
  708.           rect.height -= 1
  709.         end
  710.         if flag & 0x02 == 0  # 左通行不能
  711.           rect.x     += 1
  712.           rect.width -= 1
  713.         end
  714.         if flag & 0x04 == 0  # 右通行不能
  715.           rect.width -= 1
  716.         end
  717.         if flag & 0x08 == 0  # 上通行不能
  718.           rect.y      += 1
  719.           rect.height -= 1
  720.         end
  721.         bitmap.fill_rect(rect, KMS_MiniMap::FOREGROUND_COLOR)
  722.       }
  723.     }
  724.   end
  725.   #--------------------------------------------------------------------------
  726.   # ○ 移动イベントの描画
  727.   #--------------------------------------------------------------------------
  728.   def draw_map_move_event(bitmap)
  729.     rect = Rect.new(0, 0, @grid_size, @grid_size)
  730.     @move_events.each { |e|
  731.       rect.x = (e.x - @draw_range_begin.x) * @grid_size
  732.       rect.y = (e.y - @draw_range_begin.y) * @grid_size
  733.       bitmap.fill_rect(rect, KMS_MiniMap::MOVE_EVENT_COLOR)
  734.     }
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ○ アニメーション更新
  738.   #--------------------------------------------------------------------------
  739.   def update_animation
  740.     if @showing
  741.       # フェードイン
  742.       self.opacity += 16
  743.       if opacity == 255
  744.         @showing = false
  745.       end
  746.     elsif @hiding
  747.       # フェードアウト
  748.       self.opacity -= 16
  749.       if opacity == 0
  750.         @hiding = false
  751.       end
  752.     end
  753.   end
  754.   #--------------------------------------------------------------------------
  755.   # ○ オブジェクト描画
  756.   #--------------------------------------------------------------------------
  757.   def draw_object
  758.     # 下准备
  759.     bitmap = @object_sprite.bitmap
  760.     bitmap.clear
  761.     rect = Rect.new(0, 0, @grid_size, @grid_size)
  762.  
  763.     # オブジェクト描画
  764.     @object_list.each { |obj|
  765.       next unless in_draw_range?(obj.x, obj.y)
  766.  
  767.       color = KMS_MiniMap::OBJECT_COLOR[obj.minimap_object_type - 1]
  768.       next if color.nil?
  769.  
  770.       rect.x = (obj.real_x - @draw_range_begin.x) * @grid_size
  771.       rect.y = (obj.real_y - @draw_range_begin.y) * @grid_size
  772.       bitmap.fill_rect(rect, color)
  773.     }
  774.  
  775.     # 乗り物描画
  776.     $game_map.vehicles.each { |vehicle|
  777.       next if vehicle.transparent
  778.  
  779.       rect.x = (vehicle.real_x - @draw_range_begin.x) * @grid_size
  780.       rect.y = (vehicle.real_y - @draw_range_begin.y) * @grid_size
  781.       bitmap.fill_rect(rect, KMS_MiniMap::VEHICLE_COLOR)
  782.     }
  783.   end
  784.   #--------------------------------------------------------------------------
  785.   # ○ 更新
  786.   #--------------------------------------------------------------------------
  787.   def update
  788.     update_input
  789.  
  790.     return unless need_update?
  791.  
  792.     update_draw_range
  793.     update_position
  794.     update_animation
  795.     draw_object
  796.  
  797.     @map_sprite.update
  798.     @object_sprite.update
  799.     @position_sprite.update
  800.   end
  801.   #--------------------------------------------------------------------------
  802.   # ○ 更新判定
  803.   #--------------------------------------------------------------------------
  804.   def need_update?
  805.     return (visible && opacity > 0) || @showing || @hiding
  806.   end
  807. end
  808.  
  809. #==============================================================================
  810. # □ Sprite_MiniMapIcon
  811. #------------------------------------------------------------------------------
  812. #   ミニマップ用アイコンのクラスです。
  813. #==============================================================================
  814.  
  815. class Sprite_MiniMapIcon < Sprite
  816.   DURATION_MAX = 60
  817.   #--------------------------------------------------------------------------
  818.   # ● オブジェクト初期化
  819.   #     viewport : ビューポート
  820.   #--------------------------------------------------------------------------
  821.   def initialize(viewport = nil)
  822.     super(viewport)
  823.     @duration = DURATION_MAX / 2
  824.   end
  825.   #--------------------------------------------------------------------------
  826.   # ● フレーム更新
  827.   #--------------------------------------------------------------------------
  828.   def update
  829.     super
  830.     @duration += 1
  831.     if @duration == DURATION_MAX
  832.       @duration = 0
  833.     end
  834.     update_effect
  835.   end
  836.   #--------------------------------------------------------------------------
  837.   # ○ エフェクトの更新
  838.   #--------------------------------------------------------------------------
  839.   def update_effect
  840.     self.color.set(255, 255, 255,
  841.       (@duration - DURATION_MAX / 2).abs * KMS_MiniMap::BLINK_LEVEL
  842.     )
  843.   end
  844. end
  845.  
  846. #==============================================================================
  847. # ■ Spriteset_Map
  848. #==============================================================================
  849.  
  850. class Spriteset_Map
  851.   attr_reader :minimap
  852.   #--------------------------------------------------------------------------
  853.   # ● オブジェクト初期化
  854.   #--------------------------------------------------------------------------
  855.   alias initialize_KMS_MiniMap initialize
  856.   def initialize
  857.     initialize_KMS_MiniMap
  858.  
  859.     create_minimap
  860.   end
  861.   #--------------------------------------------------------------------------
  862.   # ○ ミニマップの作成
  863.   #--------------------------------------------------------------------------
  864.   def create_minimap
  865.     @minimap = Game_MiniMap.new(@tilemap)
  866.     @minimap.visible = $game_system.minimap_show && $game_map.minimap_show?
  867.   end
  868.   #--------------------------------------------------------------------------
  869.   # ● 解放
  870.   #--------------------------------------------------------------------------
  871.   alias dispose_KMS_MiniMap dispose
  872.   def dispose
  873.     dispose_KMS_MiniMap
  874.  
  875.     dispose_minimap
  876.   end
  877.   #--------------------------------------------------------------------------
  878.   # ○ ミニマップの解放
  879.   #--------------------------------------------------------------------------
  880.   def dispose_minimap
  881.     @minimap.dispose
  882.     @minimap = nil
  883.   end
  884.   #--------------------------------------------------------------------------
  885.   # ● フレーム更新
  886.   #--------------------------------------------------------------------------
  887.   alias update_KMS_MiniMap update
  888.   def update
  889.     update_KMS_MiniMap
  890.  
  891.     update_minimap
  892.   end
  893.   #--------------------------------------------------------------------------
  894.   # ○ ミニマップ更新
  895.   #--------------------------------------------------------------------------
  896.   def minimap_show?
  897.     return $game_map.minimap_show? && $game_system.minimap_show
  898.   end
  899.   #--------------------------------------------------------------------------
  900.   # ○ ミニマップ更新
  901.   #--------------------------------------------------------------------------
  902.   def update_minimap
  903.     return if @minimap.nil?
  904.  
  905.     # 表示切替
  906.     if minimap_show?
  907.       @minimap.visible = true
  908.     else
  909.       @minimap.visible = false
  910.       return
  911.     end
  912.  
  913.     # フェード判定
  914.     case $game_map.minimap_fade
  915.     when Game_Map::MINIMAP_FADE_IN
  916.       @minimap.fadein
  917.       $game_map.minimap_fade = Game_Map::MINIMAP_FADE_NONE
  918.     when Game_Map::MINIMAP_FADE_OUT
  919.       @minimap.fadeout
  920.       $game_map.minimap_fade = Game_Map::MINIMAP_FADE_NONE
  921.     end
  922.  
  923.     @minimap.update
  924.   end
  925.   #--------------------------------------------------------------------------
  926.   # ○ ミニマップ全体をリフレッシュ
  927.   #--------------------------------------------------------------------------
  928.   def refresh_minimap
  929.     return if @minimap.nil?
  930.  
  931.     @minimap.clear_passage_table_cache
  932.     @minimap.refresh
  933.   end
  934.   #--------------------------------------------------------------------------
  935.   # ○ ミニマップのオブジェクトを更新
  936.   #--------------------------------------------------------------------------
  937.   def update_minimap_object
  938.     @minimap.update_object_list unless @minimap.nil?
  939.   end
  940. end
  941.  
  942. #==============================================================================
  943. # ■ Scene_Map
  944. #==============================================================================
  945.  
  946. class Scene_Map
  947.   #--------------------------------------------------------------------------
  948.   # ● 场所移动後の処理
  949.   #--------------------------------------------------------------------------
  950.   alias post_transfer_KMS_MiniMap post_transfer
  951.   def post_transfer
  952.     refresh_minimap
  953.  
  954.     post_transfer_KMS_MiniMap
  955.   end
  956.   #--------------------------------------------------------------------------
  957.   # ○ ミニマップ全体をリフレッシュ
  958.   #--------------------------------------------------------------------------
  959.   def refresh_minimap
  960.     @spriteset.refresh_minimap unless @spriteset.nil?
  961.   end
  962.   #--------------------------------------------------------------------------
  963.   # ○ ミニマップのオブジェクトを更新
  964.   #--------------------------------------------------------------------------
  965.   def update_minimap_object
  966.     @spriteset.update_minimap_object unless @spriteset.nil?
  967.   end
  968. end


作者: Sion    时间: 2013-1-10 19:30
用事件做标题是跳过标题进入地图场景了吗,如果是,在该地图备注加上<MINIMAPHIDE>
作者: 纲·炎    时间: 2013-1-10 20:10
Sion 发表于 2013-1-10 19:30
用事件做标题是跳过标题进入地图场景了吗,如果是,在该地图备注加上

谢谢,不过是为什么呢,还有开始的时候会等一会儿
作者: salvareless    时间: 2013-10-26 21:44
厄,还是这个小地图脚本,遇上点问题,希望SION大神能看见。
----------
我希望做只能在某些地方才能使用小地图,而且必须依靠适当的道具(例如地下城是可以使用小地图的地方,使用背包中的地下城地图,就能开启小地图功能)而不是依靠按键。
上述的功能我考虑过公共事件,但是我解决不了公共事件怎么调出小地图的问题。说白了就是不知道怎么直接用脚本叫出/关闭小地图界面。
求大神相助。
作者: tseyik    时间: 2013-10-26 23:02
打開進入山洞事件
在事件加入腳本命令
不顕示
hide_minimap

顕示
show_minimap

上面是以事件作為開関迷你地圖的做法、
可以改成以條件做判定(如有沒有這區域的地圖)顕不顕示迷你地圖
也可以用比較簡単的方法
只要在不想顕示迷你地圖的地圖設定中的備註欄
加上<ミニマップ非表示>或<MINIMAPHIDE> 、就不會顕示迷你地圖。
作者: salvareless    时间: 2013-10-27 09:49
本帖最后由 76213585 于 2013-10-26 19:33 编辑

@tseyik (要回復或是感謝別人用回復功能對方才可以都到提醒...)
{:2_287:}哦哦哦~~~~明白了,我顺便上一个小发现。关于怎么改脚本设置小地图默认不显示的。关键在于第222行代码.把里面的“@minimap_show = true”的true改成false就可以了。
看下面的13行。
  1. class Game_System
  2.   #--------------------------------------------------------------------------
  3.   # ○ 公开インスタンス変数
  4.   #--------------------------------------------------------------------------
  5.   attr_accessor :minimap_show  # 迷你地图显示标志
  6.   #--------------------------------------------------------------------------
  7.   # ○ 对象初始化
  8.   #--------------------------------------------------------------------------
  9.   alias initialize_KMS_MiniMap initialize
  10.   def initialize
  11.     initialize_KMS_MiniMap

  12.     @minimap_show = false  #true
  13.   end
  14. end
复制代码





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