Project1
标题:
刷新无须图片的迷你地图显示
[打印本页]
作者:
黑之翅膀
时间:
2011-8-25 01:27
标题:
刷新无须图片的迷你地图显示
一直搜藏在我的U盘多年了,本人 纯属转载
QQ截图20110825011934.png
(142.08 KB, 下载次数: 22)
下载附件
保存到相册
2011-8-25 01:21 上传
无须图片的迷你地图脚本
Woratana [原作者]
RPG Maker VX
SWITCH_NO_MINIMAP = 10 # 打开这个开关的话就不显示迷你地图
MAP_RECT = [430, 20, 97, 96] # 迷你地图的大小和位置
[X, Y, Width, Height]
你可以用调用脚本的方法任意改变他:
$game_system.minimap = [X, Y, Width, Height]
MAP_Z = 0 # 迷你地图的Z轴
增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。
GRID_SIZE = 8 # 引导大小,建议数值大于3.
MINIMAP_BORDER_COLOR = Color.new(0, 0, 0, 255) # 色彩设定
Color.new(Red, Green, Blue, Opacity)
MINIMAP_BORDER_SIZE = 3
FOREGROUND_COLOR = Color.new(255, 255, 255, 255) # 可通过物颜色
BACKGROUND_COLOR = Color.new(0, 0, 0, 100) # 不可通过物颜色
USE_OUTLINE_PLAYER = true # 是否描绘的角色?
PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # 角色颜色
USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
EVENT_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # 特殊事件颜色
这里修改主角颜色 你可以输入 0 - 255 的可选色彩范围 (红, 绿, 蓝, 透明度)
PLAYER_COLOR = Color.new(0, 0, 255, 255) # 角色颜色设定
这里修改事件颜色 你可以输入 0 - 255 的可选色彩范围 (红, 绿, 蓝, 透明度)
OBJECT_COLOR['npc'] = Color.new(255,255,255,255)
OBJECT_COLOR['treasure'] = Color.new(255,255,0,255)
OBJECT_COLOR['enemy'] = Color.new(255,0,0,255)
OBJECT_COLOR['merchant'] = Color.new(255,150,0,255)
OBJECT_COLOR['teleport'] = Color.new(255,0,255,255)
OBJECT_COLOR['rest'] = Color.new(0,255,0,255)
事件里注释:
NPC 非主角控制人物 enemy敌人 treasure宝物 merchant商人 teleport传送 door门 REST 休息
脚本:
#===============================================================
# ● [VX] ?迷你地图 ? □
# * 无须图片的迷你地图脚本,浪使者倾情汉化 *
#--------------------------------------------------------------
# ? by Woratana [原作者]
# ? 用于 RPG Maker VX
# ? 最近更新: 09/09/2008
# ? 版本: 1.1 Beta
#--------------------------------------------------------------
# ? 特别感谢: KGC 的 XP 迷你地图脚本,
# 没有他的迷你地图脚本,这个就不会被做出来.
# 精灵使者更新:请在注释的第一行写入关键字,关键字可以在下面添加。
#--------------------------------------------------------------
module MiniMap
#===========================================================================
# [START]迷你地图脚本设置部分 地图名前+[NOMAP] 不显示
#---------------------------------------------------------------------------
SWITCH_NO_MINIMAP = 10 # 打开这个开关的话就不显示迷你地图
MAP_RECT = [430, 20, 97, 96] # 迷你地图的大小和位置
# [X, Y, Width, Height]
# 你可以用调用脚本的方法任意改变他:
# $game_system.minimap = [X, Y, Width, Height]
MAP_Z = 0 # 迷你地图的Z轴
# 增加这个数值,如果迷你地图显示在某些物体下面的话(被覆盖)。
GRID_SIZE = 8 # 引导大小,建议数值大于3.
MINIMAP_BORDER_COLOR = Color.new(0, 0, 0, 255) # 色彩设定
# Color.new(Red, Green, Blue, Opacity)
MINIMAP_BORDER_SIZE = 3
FOREGROUND_COLOR = Color.new(255, 255, 255, 255) # 可通过物颜色
BACKGROUND_COLOR = Color.new(0, 0, 0, 100) # 不可通过物颜色
USE_OUTLINE_PLAYER = true # 是否描绘的角色?
PLAYER_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # 角色颜色
USE_OUTLINE_EVENT = true # 是否描绘特殊事件?(如商人、敌人NPC等)
EVENT_OUTLINE_COLOR = Color.new(0, 0, 0, 255) # 特殊事件颜色
PLAYER_COLOR = Color.new(0, 0, 255, 255) # 角色颜色设定
#---------------------------------------------------------------------------
OBJECT_COLOR = {} # 不要改变或删除这一行!
#===============================================================
# * 设置关键字和颜色
#---------------------------------------------------------------
# ** 例如:
# OBJECT_COLOR['keyword'] = Color.new(Red, Green, Blue, Opacity)
#-------------------------------------------------------------
# * 'keyword': 你想放到公共事件里来显示的颜色
# ** 标记: 'keyword' 是很关键的!
# * Color.new(...): 你需要的颜色
# 你可输入 0 - 255 的可选色彩范围 (Red, Green, Blue, Opacity)
#-------------------------------------------------------------
OBJECT_COLOR['npc'] = Color.new(255,255,255,255)
OBJECT_COLOR['treasure'] = Color.new(255,255,0,255)
OBJECT_COLOR['enemy'] = Color.new(255,0,0,255)
OBJECT_COLOR['merchant'] = Color.new(255,150,0,255)
OBJECT_COLOR['teleport'] = Color.new(255,0,255,255)
OBJECT_COLOR['rest'] = Color.new(0,255,0,255)
#===========================================================================
# * [说明] 标签:
#---------------------------------------------------------------------------
# 改变这些关闭迷你地图 & 或设置显示迷你地图~
# TAG_EVENT的关键字和OBJECT_COLOR关键字要对应。
#-----------------------------------------------------------------------
TAG_NO_MINIMAP = '[NOMAP]'
TAG_EVENT = ["npc","enemy","treasure","merchant","teleport","rest"]
#---------------------------------------------------------------------------
# NPC 非主角控制人物 enemy敌人 treasure宝物 merchant商人 teleport传送 door门
# REST 休息
#---------------------------------------------------------------------------
# [END] 迷你地图脚本设置部分
#===========================================================================
def self.refresh
if $scene.is_a?(Scene_Map)
$scene.spriteset.minimap.refresh
end
end
def self.update_object
if $scene.is_a?(Scene_Map)
$scene.spriteset.minimap.update_object_list
end
end
end
#==============================================================================
# ■ RPG::MapInfo
#==============================================================================
class RPG::MapInfo
def name
return @name.gsub(/\[.*\]/) { }
end
def original_name
return @name
end
def show_minimap?
return
[email protected]
?(MiniMap::TAG_NO_MINIMAP)
end
end
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
attr_accessor :minimap
alias wora_minimap_gamsys_ini initialize
def initialize
wora_minimap_gamsys_ini
@minimap = MiniMap::MAP_RECT
end
def show_minimap
return !$game_switches[MiniMap::SWITCH_NO_MINIMAP]
end
end
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
alias wora_minimap_gammap_setup setup
def setup(map_id)
wora_minimap_gammap_setup(map_id)
@db_info = load_data('Data/MapInfos.rvdata') if @db_info.nil?
@map_info = @db_info[map_id]
end
def show_minimap?
return @map_info.show_minimap?
end
end
#==============================================================================
# ■ Game_Event
#==============================================================================
class Game_Event < Game_Character
def mm_comment?(comment, return_comment = false )
if
[email protected]
?
for i in
[email protected]
- 1
next if @list[i].code != 108
if comment.include?(@list[i].parameters[0])
return @list[i].parameters[0] if return_comment
return true
end
end
end
return '' if return_comment
return false
end
end
#==============================================================================
# ■ Game_MiniMap
#------------------------------------------------------------------------------
class Game_MiniMap
def initialize(tilemap)
@tilemap = tilemap
refresh
end
def dispose
@border.bitmap.dispose
@border.dispose
@map_sprite.bitmap.dispose
@map_sprite.dispose
@object_sprite.bitmap.dispose
@object_sprite.dispose
@position_sprite.bitmap.dispose
@position_sprite.dispose
end
def visible
return @map_sprite.visible
end
def visible=(value)
@map_sprite.visible = value
@object_sprite.visible = value
@position_sprite.visible = value
@border.visible = value
end
def refresh
@mmr = $game_system.minimap
map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
grid_size = [MiniMap::GRID_SIZE, 1].max
@x = 0
@y = 0
@size = [map_rect.width / grid_size, map_rect.height / grid_size]
@border = Sprite.new
@border.x = map_rect.x - MiniMap::MINIMAP_BORDER_SIZE
@border.y = map_rect.y - MiniMap::MINIMAP_BORDER_SIZE
b_width = map_rect.width + (MiniMap::MINIMAP_BORDER_SIZE * 2)
b_height = map_rect.height + (MiniMap::MINIMAP_BORDER_SIZE * 2)
@border.bitmap = Bitmap.new(b_width, b_height)
@border.bitmap.fill_rect(@border.bitmap.rect, MiniMap::MINIMAP_BORDER_COLOR)
@border.bitmap.clear_rect(MiniMap::MINIMAP_BORDER_SIZE, MiniMap::MINIMAP_BORDER_SIZE,
@border.bitmap.width - (MiniMap::MINIMAP_BORDER_SIZE * 2),
@border.bitmap.height - (MiniMap::MINIMAP_BORDER_SIZE * 2))
@map_sprite = Sprite.new
@map_sprite.x = map_rect.x
@map_sprite.y = map_rect.y
@map_sprite.z = MiniMap::MAP_Z
bitmap_width = $game_map.width * grid_size + map_rect.width
bitmap_height = $game_map.height * grid_size + map_rect.height
@map_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
@map_sprite.src_rect = map_rect
@object_sprite = Sprite.new
@object_sprite.x = map_rect.x
@object_sprite.y = map_rect.y
@object_sprite.z = MiniMap::MAP_Z + 1
@object_sprite.bitmap = Bitmap.new(bitmap_width, bitmap_height)
@object_sprite.src_rect = map_rect
@position_sprite = Sprite_Base.new
@position_sprite.x = map_rect.x + @size[0] / 2 * grid_size
@position_sprite.y = map_rect.y + @size[1] / 2 * grid_size
@position_sprite.z = MiniMap::MAP_Z + 2
bitmap = Bitmap.new(grid_size, grid_size)
# Player's Outline
if MiniMap::USE_OUTLINE_PLAYER and MiniMap::GRID_SIZE >= 3
bitmap.fill_rect(bitmap.rect, MiniMap::PLAYER_OUTLINE_COLOR)
brect = Rect.new(bitmap.rect.x + 1, bitmap.rect.y + 1, bitmap.rect.width - 2,
bitmap.rect.height - 2)
bitmap.clear_rect(brect)
else
brect = bitmap.rect
end
bitmap.fill_rect(brect, MiniMap::PLAYER_COLOR)
@position_sprite.bitmap = bitmap
draw_map
update_object_list
draw_object
update_position
end
def draw_map
bitmap = @map_sprite.bitmap
bitmap.fill_rect(bitmap.rect, MiniMap::BACKGROUND_COLOR)
map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
grid_size = [MiniMap::GRID_SIZE, 1].max
$game_map.width.times do |i|
$game_map.height.times do |j|
if !$game_map.passable?(i, j)
next
end
rect = Rect.new(map_rect.width / 2 + grid_size * i,
map_rect.height / 2 + grid_size * j,
grid_size, grid_size)
if grid_size >= 3
if !$game_map.passable?(i, j)
rect.height -= 1
rect.x += 1
rect.width -= 1
rect.width -= 1
rect.y += 1
rect.height -= 1
end
end
bitmap.fill_rect(rect, MiniMap::FOREGROUND_COLOR)
end
end
end
def update_object_list
@object_list = {}
$game_map.events.values.each do |e|
comment = e.mm_comment?(MiniMap::TAG_EVENT, true)
if comment != ''
#type = comment.gsub(/#{MiniMap::TAG_EVENT}/){}.gsub(/\s+/){}
type = comment
@object_list[type] = [] if @object_list[type].nil?
@object_list[type] << e
end
end
end
def draw_object
bitmap = @object_sprite.bitmap
bitmap.clear
map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
grid_size = [MiniMap::GRID_SIZE, 1].max
rect = Rect.new(0, 0, grid_size, grid_size)
mw = map_rect.width / 2
mh = map_rect.height / 2
@object_list.each do |key, events|
color = MiniMap::OBJECT_COLOR[key]
next if events.nil? or color.nil?
events.each do |obj|
#if !obj.character_name.empty?
rect.x = mw + obj.real_x * grid_size / 256
rect.y = mh + obj.real_y * grid_size / 256
# Event's Outline
if MiniMap::USE_OUTLINE_EVENT and MiniMap::GRID_SIZE >= 3
bitmap.fill_rect(rect, MiniMap::EVENT_OUTLINE_COLOR)
brect = Rect.new(rect.x + 1, rect.y + 1, rect.width - 2,
rect.height - 2)
bitmap.clear_rect(brect)
else
brect = bitmap.rect
end
bitmap.fill_rect(brect, color)
#end
end
end
end
def update
if @mmr != $game_system.minimap
dispose
refresh
end
update_object_list
draw_object
update_position
if @map_sprite.visible
@map_sprite.update
@object_sprite.update
@position_sprite.update
end
end
def update_position
map_rect = Rect.new(@mmr[0], @mmr[1], @mmr[2], @mmr[3])
grid_size = [MiniMap::GRID_SIZE, 1].max
sx = $game_player.real_x * grid_size / 256
sy = $game_player.real_y * grid_size / 256
@map_sprite.src_rect.x = sx
@map_sprite.src_rect.y = sy
@object_sprite.src_rect.x = sx
@object_sprite.src_rect.y = sy
end
end
#==============================================================================
# ■ Spriteset_Map
#------------------------------------------------------------------------------
class Spriteset_Map
attr_reader :minimap
alias wora_minimap_sprsetmap_ini initialize
alias wora_minimap_sprsetmap_dis dispose
alias wora_minimap_sprsetmap_upd update
def initialize
wora_minimap_sprsetmap_ini
if $game_map.show_minimap?
@minimap = Game_MiniMap.new(@tilemap)
$game_system.show_minimap = true if $game_system.show_minimap.nil?
@minimap.visible = $game_system.show_minimap
end
end
def dispose
@minimap.dispose if
[email protected]
?
wora_minimap_sprsetmap_dis
end
def update
if
[email protected]
?
if $game_system.show_minimap
@minimap.visible = true
@minimap.update_object_list
@minimap.update
else
@minimap.visible = false
end
end
wora_minimap_sprsetmap_upd
end
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
class Scene_Map < Scene_Base
attr_reader :spriteset
end
复制代码
黑之翅膀于2011-8-25 01:43补充以下内容:
抱歉抱歉抱歉抱歉抱歉抱歉抱歉抱歉
作者:
Gamesme
时间:
2011-8-25 09:14
谢啦楼主,很实用的脚本呢
作者:
gghg1989
时间:
2011-8-25 09:47
提示:
作者被禁止或删除 内容自动屏蔽
作者:
Sonic1997
时间:
2011-8-25 11:10
很好,就是位置移动的等候时间较长
作者:
yangff
时间:
2011-8-25 15:36
不错不错很优秀的地图显示,最喜欢了
作者:
精灵使者
时间:
2011-8-25 23:18
看到了我的更新标记了……莫非是我以前更新过的喵?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1