赞 | 170 |
VIP | 6 |
好人卡 | 208 |
积分 | 230 |
经验 | 137153 |
最后登录 | 2024-11-18 |
在线时间 | 8639 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 22968
- 在线时间
- 8639 小时
- 注册时间
- 2011-12-31
- 帖子
- 3367
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 tseyik 于 2012-3-3 20:06 编辑
原網頁
http://ytomy.sakura.ne.jp/tkool/rpgtech/php/tech.php?tool=VXAce&cat=tech_vxace/map&tech=minimap
效果
設定的地方己翻譯了
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ 迷你地图 - KMS_MiniMap ◆ VX Ace ◆
- #_/ ◇ Last update : 2012/02/12 (TOMY@Kamesoft) ◇
- #_/----------------------------------------------------------------------------
- #_/ 追加迷你地图表示机能。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ★ 设定项目 - BEGIN Setting ★
- #==============================================================================
- module KMS_MiniMap
- # ◆ 迷你地图表示切换按键
- # 空白则按钮转换无效。
- SWITCH_BUTTON = :Z
- # ◆ 迷你地图表示位置和大小 (X, Y, 寛, 高)
- MAP_RECT = Rect.new(364, 20, 160, 120)
- # ◆ 迷你地图 Z 座标
- # 注意:太大可能影响其他东西。
- MAP_Z = 0
- # ◆ 1格大小
- # 推荐 3 以上。
- GRID_SIZE = 5
- # ◆ 迷你地图顔色
- FOREGROUND_COLOR = Color.new(192, 192, 224, 160) # 前景色 (通行可)
- BACKGROUND_COLOR = Color.new( 0, 0, 160, 160) # 背景色 (通行不可)
- POSITION_COLOR = Color.new(255, 0, 0, 192) # 现在位置
- MOVE_EVENT_COLOR = Color.new(255, 160, 0, 192) # 地图移动事件
- VEHICLE_COLOR = Color.new( 96, 128, 0, 192) # 载物
- # ◆ 物件顔色
- # 按顺序OBJ1, OBJ2,... 对应。
- OBJECT_COLOR = [
- Color.new( 0, 128, 0, 192), # OBJ 1
- Color.new( 0, 160, 160, 192), # OBJ 2
- Color.new(160, 0, 160, 192), # OBJ 3
- ] # ← 这个]不能消去!
- # ◆ 图标的闪烁强度
- # 推荐 5 ~ 8 之间。
- BLINK_LEVEL = 7
- # ◆ 地图缓存的数量
- # 超越这个数的话,会删除长期间没参照东西。
- CACHE_NUM = 10
- end
- #==============================================================================
- # ☆ 设定完成 - END Setting ☆
- #==============================================================================
- $kms_imported = {} if $kms_imported == nil
- $kms_imported["MiniMap"] = true
- module KMS_MiniMap
- # 迷你地图非表示
- REGEX_NO_MINIMAP_NOTE = /<(?:ミニマップ|MINIMAP)\s*(?:非表示|HIDE)>/i
- REGEX_NO_MINIMAP_NAME = /\[NOMAP\]/i
- # 障害物
- REGEX_WALL_EVENT = /<(?:ミニマップ|MINIMAP)\s*(?:壁|障害物|WALL)>/i
- # 移动事件
- REGEX_MOVE_EVENT = /<(?:ミニマップ|MINIMAP)\s*(?:移动|MOVE)>/i
- # 物件
- REGEX_OBJECT = /<(?:ミニマップ|MINIMAP)\s+OBJ(?:ECT)?\s*(\d+)>/i
- end
- # *****************************************************************************
- #==============================================================================
- # □ KMS_Commands
- #==============================================================================
- module KMS_Commands
- module_function
- #--------------------------------------------------------------------------
- # ○ 表示迷你地图
- #--------------------------------------------------------------------------
- def show_minimap
- $game_temp.minimap_manual_visible = true
- $game_system.minimap_show = true
- end
- #--------------------------------------------------------------------------
- # ○ 不表示迷你地图
- #--------------------------------------------------------------------------
- def hide_minimap
- $game_system.minimap_show = false
- end
- #--------------------------------------------------------------------------
- # ○ 迷你地图表示状态取得
- #--------------------------------------------------------------------------
- def minimap_showing?
- return $game_system.minimap_show
- end
- #--------------------------------------------------------------------------
- # ○ 刷新迷你地图
- #--------------------------------------------------------------------------
- def refresh_minimap
- return unless SceneManager.scene_is?(Scene_Map)
- $game_map.refresh if $game_map.need_refresh
- SceneManager.scene.refresh_minimap
- end
- #--------------------------------------------------------------------------
- # ○ 更新迷你地图对象
- #--------------------------------------------------------------------------
- def update_minimap_object
- return unless SceneManager.scene_is?(Scene_Map)
- $game_map.refresh if $game_map.need_refresh
- SceneManager.scene.update_minimap_object
- end
- end
- #==============================================================================
- # ■ Game_Interpreter
- #==============================================================================
- class Game_Interpreter
- # 事件指令:直接處理指令
- include KMS_Commands
- end
- #==============================================================================
- # ■ RPG::Map
- #==============================================================================
- class RPG::Map
- #--------------------------------------------------------------------------
- # ○ 生成迷你地图缓存
- #--------------------------------------------------------------------------
- def create_minimap_cache
- @__minimap_show = true
- note.each_line { |line|
- if line =~ KMS_MiniMap::REGEX_NO_MINIMAP_NOTE # マップ非表示
- @__minimap_show = false
- end
- }
- end
- #--------------------------------------------------------------------------
- # ○ 表示迷你地图
- #--------------------------------------------------------------------------
- def minimap_show?
- create_minimap_cache if @__minimap_show.nil?
- return @__minimap_show
- end
- end
- #==============================================================================
- # ■ RPG::MapInfo
- #==============================================================================
- class RPG::MapInfo
- #--------------------------------------------------------------------------
- # ● 地图名取得
- #--------------------------------------------------------------------------
- def name
- return @name.gsub(/\[.*\]/) { "" }
- end
- #--------------------------------------------------------------------------
- # ○ 取得原始地图名
- #--------------------------------------------------------------------------
- def original_name
- return @name
- end
- #--------------------------------------------------------------------------
- # ○ 生成迷你地图缓存
- #--------------------------------------------------------------------------
- def create_minimap_cache
- @__minimap_show = !(@name =~ KMS_MiniMap::REGEX_NO_MINIMAP_NAME)
- end
- #--------------------------------------------------------------------------
- # ○ 表示迷你地图
- #--------------------------------------------------------------------------
- def minimap_show?
- create_minimap_cache if @__minimap_show == nil
- return @__minimap_show
- end
- end
- #==============================================================================
- # ■ Game_Temp
- #==============================================================================
- class Game_Temp
- #--------------------------------------------------------------------------
- # ○ 公共实例变量
- #--------------------------------------------------------------------------
- attr_accessor :minimap_manual_visible # 手动切换小地图显示标志
- #--------------------------------------------------------------------------
- # ○ 对象初始化
- #--------------------------------------------------------------------------
- alias initialize_KMS_MiniMap initialize
- def initialize
- initialize_KMS_MiniMap
- @minimap_manual_visible = true
- end
- end
- #==============================================================================
- # ■ Game_System
- #==============================================================================
- class Game_System
- #--------------------------------------------------------------------------
- # ○ 公开インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :minimap_show # 迷你地图显示标志
- #--------------------------------------------------------------------------
- # ○ 对象初始化
- #--------------------------------------------------------------------------
- alias initialize_KMS_MiniMap initialize
- def initialize
- initialize_KMS_MiniMap
- @minimap_show = true
- end
- end
- #==============================================================================
- # ■ Game_Map
- #==============================================================================
- class Game_Map
- #--------------------------------------------------------------------------
- # ○ 定数
- #--------------------------------------------------------------------------
- MINIMAP_FADE_NONE = 0 # ミニマップ フェードなし
- MINIMAP_FADE_IN = 1 # ミニマップ フェードイン
- MINIMAP_FADE_OUT = 2 # ミニマップ フェードアウト
- #--------------------------------------------------------------------------
- # ○ 公开インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :minimap_fade
- #--------------------------------------------------------------------------
- # ○ ミニマップを表示するか
- #--------------------------------------------------------------------------
- def minimap_show?
- return $data_mapinfos[map_id].minimap_show? && @map.minimap_show?
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップをフェードイン
- #--------------------------------------------------------------------------
- def fadein_minimap
- @minimap_fade = MINIMAP_FADE_IN
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップをフェードアウト
- #--------------------------------------------------------------------------
- def fadeout_minimap
- @minimap_fade = MINIMAP_FADE_OUT
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- alias refresh_KMS_MiniMap refresh
- def refresh
- refresh_KMS_MiniMap
- SceneManager.scene.refresh_minimap if SceneManager.scene_is?(Scene_Map)
- end
- end
- #==============================================================================
- # ■ Game_Event
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # ○ ミニマップ用のキャッシュを作成
- #--------------------------------------------------------------------------
- def __create_minimap_cache
- @__last_page = @page
- @__minimap_wall_event = false
- @__minimap_move_event = false
- @__minimap_object_type = -1
- return if @page.nil?
- @page.list.each { |cmd|
- # 注釈以外に到达したら离脱
- break unless [108, 408].include?(cmd.code)
- # 正规表现判定
- case cmd.parameters[0]
- when KMS_MiniMap::REGEX_WALL_EVENT
- @__minimap_wall_event = true
- when KMS_MiniMap::REGEX_MOVE_EVENT
- @__minimap_move_event = true
- when KMS_MiniMap::REGEX_OBJECT
- @__minimap_object_type = $1.to_i
- end
- }
- end
- private :__create_minimap_cache
- #--------------------------------------------------------------------------
- # ○ グラフィックがあるか
- #--------------------------------------------------------------------------
- def graphic_exist?
- return (character_name != "" || tile_id > 0)
- end
- #--------------------------------------------------------------------------
- # ○ 障害物か
- #--------------------------------------------------------------------------
- def is_minimap_wall_event?
- if @__minimap_wall_event.nil? || @__last_page != @page
- __create_minimap_cache
- end
- return @__minimap_wall_event
- end
- #--------------------------------------------------------------------------
- # ○ 移动イベントか
- #--------------------------------------------------------------------------
- def is_minimap_move_event?
- if @__minimap_move_event.nil? || @__last_page != @page
- __create_minimap_cache
- end
- return @__minimap_move_event
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップオブジェクトか
- #--------------------------------------------------------------------------
- def is_minimap_object?
- if @__minimap_object_type.nil? || @__last_page != @page
- __create_minimap_cache
- end
- return @__minimap_object_type > 0
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップオブジェクトタイプ
- #--------------------------------------------------------------------------
- def minimap_object_type
- if @__minimap_object_type.nil? || @__last_page != @page
- __create_minimap_cache
- end
- return @__minimap_object_type
- end
- end
- #==============================================================================
- # □ Game_MiniMap
- #------------------------------------------------------------------------------
- # ミニマップを扱うクラスです。
- #==============================================================================
- class Game_MiniMap
- #--------------------------------------------------------------------------
- # ○ 构造体
- #--------------------------------------------------------------------------
- Point = Struct.new(:x, :y)
- Size = Struct.new(:width, :height)
- PassageCache = Struct.new(:map_id, :table, :scan_table)
- #--------------------------------------------------------------------------
- # ○ クラス変数
- #--------------------------------------------------------------------------
- @@passage_cache = [] # 通行フラグテーブルキャッシュ
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(tilemap)
- @map_rect = KMS_MiniMap::MAP_RECT
- @grid_size = [KMS_MiniMap::GRID_SIZE, 1].max
- @x = 0
- @y = 0
- @grid_num = Point.new(
- (@map_rect.width + @grid_size - 1) / @grid_size,
- (@map_rect.height + @grid_size - 1) / @grid_size
- )
- @draw_grid_num = Point.new(@grid_num.x + 2, @grid_num.y + 2)
- @draw_range_begin = Point.new(0, 0)
- @draw_range_end = Point.new(0, 0)
- @tilemap = tilemap
- @last_x = $game_player.x
- @last_y = $game_player.y
- @showing = false
- @hiding = false
- create_sprites
- refresh
- unless $game_temp.minimap_manual_visible
- self.opacity = 0
- end
- end
- #--------------------------------------------------------------------------
- # ○ スプライト作成
- #--------------------------------------------------------------------------
- def create_sprites
- @viewport = Viewport.new(@map_rect)
- @viewport.z = KMS_MiniMap::MAP_Z
- # ビットマップサイズ计算
- @bmp_size = Size.new(
- (@grid_num.x + 2) * @grid_size,
- (@grid_num.y + 2) * @grid_size
- )
- @buf_bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)
- # マップ用スプライト作成
- @map_sprite = Sprite.new(@viewport)
- @map_sprite.x = -@grid_size
- @map_sprite.y = -@grid_size
- @map_sprite.z = 0
- @map_sprite.bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)
- # オブジェクト用スプライト作成
- @object_sprite = Sprite_MiniMapIcon.new(@viewport)
- @object_sprite.x = -@grid_size
- @object_sprite.y = -@grid_size
- @object_sprite.z = 1
- @object_sprite.bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)
- # 现在位置スプライト作成
- @position_sprite = Sprite_MiniMapIcon.new
- @position_sprite.x = @map_rect.x + @grid_num.x / 2 * @grid_size
- @position_sprite.y = @map_rect.y + @grid_num.y / 2 * @grid_size
- @position_sprite.z = @viewport.z + 2
- bitmap = Bitmap.new(@grid_size, @grid_size)
- bitmap.fill_rect(bitmap.rect, KMS_MiniMap::POSITION_COLOR)
- @position_sprite.bitmap = bitmap
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- @buf_bitmap.dispose
- @map_sprite.bitmap.dispose
- @map_sprite.dispose
- @object_sprite.bitmap.dispose
- @object_sprite.dispose
- @position_sprite.bitmap.dispose
- @position_sprite.dispose
- @viewport.dispose
- end
- #--------------------------------------------------------------------------
- # ○ 可视状态取得
- #--------------------------------------------------------------------------
- def visible
- return @map_sprite.visible
- end
- #--------------------------------------------------------------------------
- # ○ 可视状态设定
- #--------------------------------------------------------------------------
- def visible=(value)
- @viewport.visible = value
- @map_sprite.visible = value
- @object_sprite.visible = value
- @position_sprite.visible = value
- end
- #--------------------------------------------------------------------------
- # ○ 不透明度取得
- #--------------------------------------------------------------------------
- def opacity
- return @map_sprite.opacity
- end
- #--------------------------------------------------------------------------
- # ○ 不透明度设定
- #--------------------------------------------------------------------------
- def opacity=(value)
- @map_sprite.opacity = value
- @object_sprite.opacity = value
- @position_sprite.opacity = value
- end
- #--------------------------------------------------------------------------
- # ○ リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- update_draw_range
- update_passage_table
- update_object_list
- update_position
- draw_map
- draw_object
- Graphics.frame_reset
- end
- #--------------------------------------------------------------------------
- # ○ フェードイン
- #--------------------------------------------------------------------------
- def fadein
- @showing = true
- @hiding = false
- end
- #--------------------------------------------------------------------------
- # ○ フェードアウト
- #--------------------------------------------------------------------------
- def fadeout
- @showing = false
- @hiding = true
- end
- #--------------------------------------------------------------------------
- # ○ キー入力更新
- #--------------------------------------------------------------------------
- def update_input
- return if KMS_MiniMap::SWITCH_BUTTON.nil?
- if Input.trigger?(KMS_MiniMap::SWITCH_BUTTON)
- if opacity < 255 && !@showing
- $game_temp.minimap_manual_visible = true
- fadein
- elsif opacity > 0 && !@hiding
- $game_temp.minimap_manual_visible = false
- fadeout
- end
- end
- end
- #--------------------------------------------------------------------------
- # ○ 描画范囲更新
- #--------------------------------------------------------------------------
- def update_draw_range
- range = []
- (2).times { |i| range[i] = @draw_grid_num[i] / 2 }
- @draw_range_begin.x = $game_player.x - range[0]
- @draw_range_begin.y = $game_player.y - range[1]
- @draw_range_end.x = $game_player.x + range[0]
- @draw_range_end.y = $game_player.y + range[1]
- end
- #--------------------------------------------------------------------------
- # ○ 通行可否テーブル更新
- #--------------------------------------------------------------------------
- def update_passage_table
- cache = get_passage_table_cache
- @passage_table = cache.table
- @passage_scan_table = cache.scan_table
- update_around_passage_table
- end
- #--------------------------------------------------------------------------
- # ○ 通行可否テーブルのキャッシュを取得
- #--------------------------------------------------------------------------
- def get_passage_table_cache
- map_id = $game_map.map_id
- cache = @@passage_cache.find { |c| c.map_id == map_id }
- # キャッシュミスしたら新规作成
- if cache == nil
- cache = PassageCache.new(map_id)
- cache.table = Table.new($game_map.width, $game_map.height)
- cache.scan_table = Table.new(
- ($game_map.width + @draw_grid_num.x - 1) / @draw_grid_num.x,
- ($game_map.height + @draw_grid_num.y - 1) / @draw_grid_num.y
- )
- end
- # 直近のキャッシュは先头に移动し、古いキャッシュは削除
- @@passage_cache.unshift(cache)
- @@passage_cache.delete_at(KMS_MiniMap::CACHE_NUM)
- return cache
- end
- #--------------------------------------------------------------------------
- # ○ 通行可否テーブルのキャッシュをクリア
- #--------------------------------------------------------------------------
- def clear_passage_table_cache
- return if @passage_scan_table == nil
- table = @passage_scan_table
- @passage_scan_table = Table.new(table.xsize, table.ysize)
- end
- #--------------------------------------------------------------------------
- # ○ 通行可否テーブルの探索
- # x, y : 探索位置
- #--------------------------------------------------------------------------
- def scan_passage(x, y)
- dx = x / @draw_grid_num.x
- dy = y / @draw_grid_num.y
- # 探索済み
- return if @passage_scan_table[dx, dy] == 1
- # マップ范囲外
- return unless dx.between?(0, @passage_scan_table.xsize - 1)
- return unless dy.between?(0, @passage_scan_table.ysize - 1)
- rx = (dx * @draw_grid_num.x)...((dx + 1) * @draw_grid_num.x)
- ry = (dy * @draw_grid_num.y)...((dy + 1) * @draw_grid_num.y)
- mw = $game_map.width - 1
- mh = $game_map.height - 1
- # 探索范囲内の通行テーブルを生成
- rx.each { |x|
- next unless x.between?(0, mw)
- ry.each { |y|
- next unless y.between?(0, mh)
- # 通行方向フラグ作成
- # (↓、←、→、↑ の顺に 1, 2, 4, 8 が対応)
- flag = 0
- [2, 4, 6, 8].each{ |d|
- flag |= 1 << (d / 2 - 1) if $game_map.passable?(x, y, d)
- }
- @passage_table[x, y] = flag
- }
- }
- @passage_scan_table[dx, dy] = 1
- end
- #--------------------------------------------------------------------------
- # ○ 周辺の通行可否テーブル更新
- #--------------------------------------------------------------------------
- def update_around_passage_table
- gx = @draw_grid_num.x
- gy = @draw_grid_num.y
- dx = $game_player.x - gx / 2
- dy = $game_player.y - gy / 2
- scan_passage(dx, dy)
- scan_passage(dx + gx, dy)
- scan_passage(dx, dy + gy)
- scan_passage(dx + gx, dy + gy)
- end
- #--------------------------------------------------------------------------
- # ○ オブジェクト一覧更新
- #--------------------------------------------------------------------------
- def update_object_list
- events = $game_map.events.values
- # WALL
- @wall_events = events.find_all { |e| e.is_minimap_wall_event? }
- # MOVE
- @move_events = events.find_all { |e| e.is_minimap_move_event? }
- # OBJ
- @object_list = events.find_all { |e| e.is_minimap_object? }
- end
- #--------------------------------------------------------------------------
- # ○ 位置更新
- #--------------------------------------------------------------------------
- def update_position
- # 移动量算出
- pt = Point.new($game_player.x, $game_player.y)
- ox = ($game_player.real_x - pt.x) * @grid_size
- oy = ($game_player.real_y - pt.y) * @grid_size
- @viewport.ox = ox
- @viewport.oy = oy
- # 移动していたらマップ再描画
- if pt.x != @last_x || pt.y != @last_y
- draw_map
- @last_x = pt.x
- @last_y = pt.y
- end
- end
- #--------------------------------------------------------------------------
- # ○ 描画范囲内判定
- #--------------------------------------------------------------------------
- def in_draw_range?(x, y)
- rb = @draw_range_begin
- re = @draw_range_end
- return (x.between?(rb.x, re.x) && y.between?(rb.y, re.y))
- end
- #--------------------------------------------------------------------------
- # ○ マップ范囲内判定
- #--------------------------------------------------------------------------
- def in_map_range?(x, y)
- mw = $game_map.width
- mh = $game_map.height
- return (x.between?(0, mw - 1) && y.between?(0, mh - 1))
- end
- #--------------------------------------------------------------------------
- # ○ マップ描画
- #--------------------------------------------------------------------------
- def draw_map
- update_around_passage_table
- bitmap = @map_sprite.bitmap
- bitmap.fill_rect(bitmap.rect, KMS_MiniMap::BACKGROUND_COLOR)
- draw_map_foreground(bitmap)
- draw_map_move_event(bitmap)
- end
- #--------------------------------------------------------------------------
- # ○ 通行可能领域の描画
- #--------------------------------------------------------------------------
- def draw_map_foreground(bitmap)
- range_x = (@draw_range_begin.x)..(@draw_range_end.x)
- range_y = (@draw_range_begin.y)..(@draw_range_end.y)
- map_w = $game_map.width - 1
- map_h = $game_map.height - 1
- rect = Rect.new(0, 0, @grid_size, @grid_size)
- range_x.each { |x|
- next unless x.between?(0, map_w)
- range_y.each { |y|
- next unless y.between?(0, map_h)
- next if @passage_table[x, y] == 0
- next if @wall_events.find { |e| e.x == x && e.y == y } # 壁
- # グリッド描画サイズ算出
- rect.set(0, 0, @grid_size, @grid_size)
- rect.x = (x - @draw_range_begin.x) * @grid_size
- rect.y = (y - @draw_range_begin.y) * @grid_size
- flag = @passage_table[x, y]
- if flag & 0x01 == 0 # 下通行不能
- rect.height -= 1
- end
- if flag & 0x02 == 0 # 左通行不能
- rect.x += 1
- rect.width -= 1
- end
- if flag & 0x04 == 0 # 右通行不能
- rect.width -= 1
- end
- if flag & 0x08 == 0 # 上通行不能
- rect.y += 1
- rect.height -= 1
- end
- bitmap.fill_rect(rect, KMS_MiniMap::FOREGROUND_COLOR)
- }
- }
- end
- #--------------------------------------------------------------------------
- # ○ 移动イベントの描画
- #--------------------------------------------------------------------------
- def draw_map_move_event(bitmap)
- rect = Rect.new(0, 0, @grid_size, @grid_size)
- @move_events.each { |e|
- rect.x = (e.x - @draw_range_begin.x) * @grid_size
- rect.y = (e.y - @draw_range_begin.y) * @grid_size
- bitmap.fill_rect(rect, KMS_MiniMap::MOVE_EVENT_COLOR)
- }
- end
- #--------------------------------------------------------------------------
- # ○ アニメーション更新
- #--------------------------------------------------------------------------
- def update_animation
- if @showing
- # フェードイン
- self.opacity += 16
- if opacity == 255
- @showing = false
- end
- elsif @hiding
- # フェードアウト
- self.opacity -= 16
- if opacity == 0
- @hiding = false
- end
- end
- end
- #--------------------------------------------------------------------------
- # ○ オブジェクト描画
- #--------------------------------------------------------------------------
- def draw_object
- # 下准备
- bitmap = @object_sprite.bitmap
- bitmap.clear
- rect = Rect.new(0, 0, @grid_size, @grid_size)
- # オブジェクト描画
- @object_list.each { |obj|
- next unless in_draw_range?(obj.x, obj.y)
- color = KMS_MiniMap::OBJECT_COLOR[obj.minimap_object_type - 1]
- next if color.nil?
- rect.x = (obj.real_x - @draw_range_begin.x) * @grid_size
- rect.y = (obj.real_y - @draw_range_begin.y) * @grid_size
- bitmap.fill_rect(rect, color)
- }
- # 乗り物描画
- $game_map.vehicles.each { |vehicle|
- next if vehicle.transparent
- rect.x = (vehicle.real_x - @draw_range_begin.x) * @grid_size
- rect.y = (vehicle.real_y - @draw_range_begin.y) * @grid_size
- bitmap.fill_rect(rect, KMS_MiniMap::VEHICLE_COLOR)
- }
- end
- #--------------------------------------------------------------------------
- # ○ 更新
- #--------------------------------------------------------------------------
- def update
- update_input
- return unless need_update?
- update_draw_range
- update_position
- update_animation
- draw_object
- @map_sprite.update
- @object_sprite.update
- @position_sprite.update
- end
- #--------------------------------------------------------------------------
- # ○ 更新判定
- #--------------------------------------------------------------------------
- def need_update?
- return (visible && opacity > 0) || @showing || @hiding
- end
- end
- #==============================================================================
- # □ Sprite_MiniMapIcon
- #------------------------------------------------------------------------------
- # ミニマップ用アイコンのクラスです。
- #==============================================================================
- class Sprite_MiniMapIcon < Sprite
- DURATION_MAX = 60
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # viewport : ビューポート
- #--------------------------------------------------------------------------
- def initialize(viewport = nil)
- super(viewport)
- @duration = DURATION_MAX / 2
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- @duration += 1
- if @duration == DURATION_MAX
- @duration = 0
- end
- update_effect
- end
- #--------------------------------------------------------------------------
- # ○ エフェクトの更新
- #--------------------------------------------------------------------------
- def update_effect
- self.color.set(255, 255, 255,
- (@duration - DURATION_MAX / 2).abs * KMS_MiniMap::BLINK_LEVEL
- )
- end
- end
- #==============================================================================
- # ■ Spriteset_Map
- #==============================================================================
- class Spriteset_Map
- attr_reader :minimap
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_KMS_MiniMap initialize
- def initialize
- initialize_KMS_MiniMap
- create_minimap
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップの作成
- #--------------------------------------------------------------------------
- def create_minimap
- @minimap = Game_MiniMap.new(@tilemap)
- @minimap.visible = $game_system.minimap_show && $game_map.minimap_show?
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- alias dispose_KMS_MiniMap dispose
- def dispose
- dispose_KMS_MiniMap
- dispose_minimap
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップの解放
- #--------------------------------------------------------------------------
- def dispose_minimap
- @minimap.dispose
- @minimap = nil
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias update_KMS_MiniMap update
- def update
- update_KMS_MiniMap
- update_minimap
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップ更新
- #--------------------------------------------------------------------------
- def minimap_show?
- return $game_map.minimap_show? && $game_system.minimap_show
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップ更新
- #--------------------------------------------------------------------------
- def update_minimap
- return if @minimap.nil?
- # 表示切替
- if minimap_show?
- @minimap.visible = true
- else
- @minimap.visible = false
- return
- end
- # フェード判定
- case $game_map.minimap_fade
- when Game_Map::MINIMAP_FADE_IN
- @minimap.fadein
- $game_map.minimap_fade = Game_Map::MINIMAP_FADE_NONE
- when Game_Map::MINIMAP_FADE_OUT
- @minimap.fadeout
- $game_map.minimap_fade = Game_Map::MINIMAP_FADE_NONE
- end
- @minimap.update
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップ全体をリフレッシュ
- #--------------------------------------------------------------------------
- def refresh_minimap
- return if @minimap.nil?
- @minimap.clear_passage_table_cache
- @minimap.refresh
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップのオブジェクトを更新
- #--------------------------------------------------------------------------
- def update_minimap_object
- @minimap.update_object_list unless @minimap.nil?
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #==============================================================================
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● 场所移动後の処理
- #--------------------------------------------------------------------------
- alias post_transfer_KMS_MiniMap post_transfer
- def post_transfer
- refresh_minimap
- post_transfer_KMS_MiniMap
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップ全体をリフレッシュ
- #--------------------------------------------------------------------------
- def refresh_minimap
- @spriteset.refresh_minimap unless @spriteset.nil?
- end
- #--------------------------------------------------------------------------
- # ○ ミニマップのオブジェクトを更新
- #--------------------------------------------------------------------------
- def update_minimap_object
- @spriteset.update_minimap_object unless @spriteset.nil?
- end
- end
复制代码 現在試一試
先下載這個(没有迷你地圖)、用来實作一次
灯光(日文) sample_beta.zip
http://115.com/file/c24ir9an#
下載完、解圧後打開工程
加入上面的脚本
試一試效果
但進入山洞、也顕示了地圖、那就破坏了燭光脚本原意了
脚本予留了對策
先退出測試
在地圖1(世界地圖上)
打開進入山洞事件
在第一句中加入脚本命令
hide_minimap
再試玩就発現山洞中己没了迷你地圖
柤對回到世界地圖上表示迷你地圖
也要在退出山洞的地方適當地上加入脚本命令
show_minimap
上面是以事件作為開関迷你地圖的做法、
可以改成以条件做判定(如有沒有這区域的地圖)顕不顕示迷你地圖
也可以用比較簡単的方法
只要在不想顕示迷你地圖的地圖設定中的備註欄
加上<ミニマップ非表示>或<MINIMAPHIDE>、就不會顕示迷你地圖。
説明
通常,只要導入腳本就能使用。
若不想使用mini地圖的地圖,只要把地圖明名[NOMAP],或在備註欄加上<ミニマップ非表示>或<MINIMAPHIDE>。
活動頁的最上部配置「註釋,記述在那裡<>圍著的指令,能在mini地圖上做出各種活動。
指令可以用英語,大小字母。
地圖移動事件
<ミニマップ 移動>
<minimap move>
代表事件處理拖動地圖。
此命令配置的事件,你就會很容易理解(彩色)的迷你地圖上強調,什麼移到哪裡去了。
通行不可事件
<ミニマップ 壁>
<ミニマップ 障害物>
<minimap wall>
迷你地圖上,這事件會被視為牆處理。
物件
<ミニマップ objN>
<minimap objN>
表示如人類和鎮的怪物的事件
N是一個整數,大於或等於1。
(在示例中,指定obj1人類,obj2告示牌,等等。)
和obj和數值之間放入空白,也能寫obj 1。
相應的對象的顏色,您可以編輯設置。
默認情況下,它支持多達到obj3,不過如果把顏色追加,你就能使用obj4或更多。
# ◆ 物件色
OBJECT_COLOR = [
Color.new( 0, 160, 0, 160), # OBJ 1
Color.new( 0, 160, 160, 192), # OBJ 2
Color.new(160, 0, 160, 192), # OBJ 3
]
在一個特定的事件,要暫時隱藏迷你地圖,在“腳本”事件的命令,請運行hide_minimap。
# 隱藏迷你地圖
hide_minimap
再次要表示,使用show_minimap。
# 表示迷你地圖
show_minimap
在設定項目能變更迷你地圖的大小。
# ◆ 1格的尺寸
GRID_SIZE = 5
如果受覆盍的迷你地圖,請增加Z坐標的地圖。
# ◆ 迷你地圖 Z 座標(若迷你地圖被其他圖層掩蓋、可増加這数値)
MAP_Z = 0
若数値過大,有可能影響到其他信息窗上的問題。
|
评分
-
查看全部评分
|