设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 26566|回复: 35
打印 上一主题 下一主题

[RMVA发布] 世界地图+传送功能 (更新 V1.51)

  [复制链接]

Lv2.观梦者

天仙

梦石
0
星屑
610
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

跳转到指定楼层
1
发表于 2012-3-6 13:26:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 Sion 于 2013-12-16 16:31 编辑

下载范例工程:
V1.51:
http://hop.tl/dNRLwLRxrE_nRqkEoT
http://115.com/file/be7vl7yi
world_map_1-51.zip (2.99 MB, 下载次数: 3341)

V1.5:
http://hop.tl/TwWJvVnxLKXKuE4Eg1
http://115.com/file/ani8my4g

V1.0:
http://dl.dbank.com/c0ovr5aqps
http://hop.tl/VfsTEJhde8Z8_FJVrT
http://db.tt/b2hCM6mN

太长太多,就不贴出来了,请自己下载范例工程
说明也全部写在脚本里了。

截图:




更新日志:
2012-03-10 更新 v1.5
* 介面更新:隐藏地图列表窗口,放大世界地图区域
             使用方向键选择目标
* 新增功能:地图名称颜色
             使用 [name_color X] 指定文字颜色,没有指定的默认为 0
             无法传送又未知的地图则以灰色显示

2012-03-18 更新 v1.51
* 修复 BUG:修复在子地图中开启世界地图介面无法选择其他地图的BUG

核心:

  1. class RPG::Map
  2.   #--------------------------------------------------------------------------
  3.   # ● 获取世界地图XY座标
  4.   #--------------------------------------------------------------------------
  5.   def get_worldxy
  6.     self.note.split(/[\r\n]+/).each { |line|
  7.       if line =~ /\[worldxy (\d+),(?:|\s+)(\d+)\]/
  8.         return $1.to_i, $2.to_i
  9.       end
  10.     }
  11.     return -1, -1
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 获取玩家在世界地图上的XY座标
  15.   #--------------------------------------------------------------------------
  16.   def get_playerxy
  17.     self.note.split(/[\r\n]+/).each { |line|
  18.       if line =~ /\[playerxy (\d+),(?:|\s+)(\d+)\]/
  19.         return $1.to_i, $2.to_i
  20.       end
  21.     }
  22.     return -1, -1
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 获取玩家传送后的地图XY座标
  26.   #--------------------------------------------------------------------------
  27.   def get_landxy
  28.     self.note.split(/[\r\n]+/).each { |line|
  29.       if line =~ /\[landxy (\d+),(?:|\s+)(\d+)\]/
  30.         return $1.to_i, $2.to_i
  31.       end
  32.     }
  33.     return -1, -1
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 获取显示在世界地图上的图像文件名
  37.   #--------------------------------------------------------------------------
  38.   def get_worldimg
  39.     self.note.split(/[\r\n]+/).each { |line|
  40.       return $1 if line =~ /\[worldimg (\w+)\]/
  41.     }
  42.     return ""
  43.   end
  44.   def get_detailimg
  45.     self.note.split(/[\r\n]+/).each { |line|
  46.       return $1 if line =~ /\[detimg (\w+)\]/
  47.     }
  48.     return ""
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 获取显示在世界地图上的说明文字
  52.   #--------------------------------------------------------------------------
  53.   def get_desc
  54.     self.note.split(/[\r\n]+/).each { |line|
  55.       return $1 if line =~ /\[desc (\S+)\]/
  56.     }
  57.     return ""
  58.   end
  59.   def get_visitswitch
  60.     self.note.split(/[\r\n]+/).each { |line|
  61.       return $1.to_i if line =~ /\[visitswitch (\d+)\]/
  62.     }
  63.     return 0
  64.   end
  65.   def get_name_color
  66.     self.note.split(/[\r\n]+/).each { |line|
  67.       return $1.to_i if line =~ /\[name_color (\d+)\]/
  68.     }
  69.     return 0
  70.   end
  71. end
  72. #==============================================================================
  73. # ■ Data_Map
  74. #------------------------------------------------------------------------------
  75. #  储存地图与传送的相关资料。
  76. #==============================================================================
  77. class Data_Map
  78.   IGNORE_VISIT_SWITCH = false # 忽略造访过的开关
  79.   attr_reader   :id
  80.   attr_reader   :player_x
  81.   attr_reader   :player_y
  82.   attr_reader   :world_x
  83.   attr_reader   :world_y
  84.   attr_reader   :land_x
  85.   attr_reader   :land_y
  86.   attr_reader   :world_img
  87.   attr_reader   :name_color
  88.   attr_reader   :description
  89.   attr_reader   :detail_image
  90.   attr_accessor :full_desc
  91.   
  92.   #--------------------------------------------------------------------------
  93.   # ● 初始化
  94.   #--------------------------------------------------------------------------
  95.   def initialize(map_id)
  96.     @id = map_id
  97.     map = load_data(sprintf("Data/Map%03d.rvdata2", @id))
  98.     @name = $data_mapinfos[@id].name
  99.     @parent_id = $data_mapinfos[@id].parent_id
  100.     @display_name = map.display_name
  101.     @world_x, @world_y = map.get_worldxy
  102.     @player_x, @player_y = map.get_playerxy
  103.     @land_x, @land_y = map.get_landxy
  104.     @world_img = map.get_worldimg
  105.     @name_color = map.get_name_color
  106.     @full_desc = ""
  107.     @detail_image = map.get_detailimg
  108.     @description = map.get_desc
  109.     @visited = false
  110.     @known = false
  111.     @visit_switch_id = map.get_visitswitch
  112.     adjust_player_xy
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 地图名称
  116.   #--------------------------------------------------------------------------
  117.   def name
  118.     return @name unless @display_name!=""
  119.     return @display_name
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 判断是否可以传送
  123.   #--------------------------------------------------------------------------
  124.   def can_transfer?
  125.     return false if @land_x==-1 && @land_y==-1
  126.     return false if name.include?("MAP") # 若名称是普通为命名的名称时无法传送
  127.     return visited? && !isCurrentMap?
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 判断是否可以列出
  131.   #--------------------------------------------------------------------------
  132.   def can_list?
  133.     return false if @world_img == ""
  134.     return !(@world_x==-1 && @world_y==-1)
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 判断是否可以使用
  138.   #--------------------------------------------------------------------------
  139.   def can_use?
  140.     return visited? || known?
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 判断是否已经造访过
  144.   #--------------------------------------------------------------------------
  145.   def visited?
  146.     return true if IGNORE_VISIT_SWITCH # 忽略时返回 true
  147.     if @visit_switch_id != 0
  148.       return $game_switches[@visit_switch_id]
  149.     end
  150.     return @visited
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 判断是否有详细资讯
  154.   #--------------------------------------------------------------------------
  155.   def has_detail?
  156.     return @full_desc != "" || @detail_image != ""
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 判断是否已知
  160.   #--------------------------------------------------------------------------
  161.   def known?
  162.     return false unless has_detail?
  163.     return @known
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 判断是否为当前地图
  167.   #--------------------------------------------------------------------------
  168.   def isCurrentMap?
  169.     return @id == $game_map.map_id
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 造访地图
  173.   #--------------------------------------------------------------------------
  174.   def visit
  175.     @visited = true
  176.     know
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 取消造访地图
  180.   #--------------------------------------------------------------------------
  181.   def unvisit
  182.     @visited = false
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 已知地图
  186.   #--------------------------------------------------------------------------
  187.   def know
  188.     @known = true
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 取消已知地图
  192.   #--------------------------------------------------------------------------
  193.   def unknow
  194.     @knwon = false
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 调整主角显示座标
  198.   #--------------------------------------------------------------------------
  199.   def adjust_player_xy
  200.     return if @player_x>=0 && @player_y>=0 # 本地图有指定时返回
  201.     if @world_x>=0 && @world_y>=0 # 本地图在世界地图上有显示时
  202.       @player_x, @player_y = @world_x, @world_y # 获取世界地图座标
  203.     else
  204.       @player_x, @player_y = parent_player_xy # 获取母地图主角座标
  205.     end
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 获取母地图的主角显示座标
  209.   #--------------------------------------------------------------------------
  210.   def parent_player_xy
  211.     if @parent_id == 0 # 无母地图时
  212.       return Graphics.width, 0 # 显示荧幕外
  213.     else
  214.       par_map = $data_maps[@parent_id]
  215.       return par_map.player_x, par_map.player_y # 返回母地图指定的主角显示座标
  216.     end
  217.   end
  218.   def parent_id_on_map
  219.     return 0 if @parent_id == 0 # 无母地图时
  220.     par_map = $data_maps[@parent_id]
  221.     if par_map.player_x == @player_x && par_map.player_y == @player_y
  222.       return @parent_id
  223.     else
  224.       return parent_id_on_map
  225.     end
  226.   end
  227. end
  228. module DataManager
  229.   #--------------------------------------------------------------------------
  230.   # ● 载入资料库
  231.   #--------------------------------------------------------------------------
  232.   class << self
  233.     alias worldmap_load_database load_database
  234.     def load_database
  235.       worldmap_load_database
  236.       load_mapdata # 载入地图资料
  237.       map_data_setup
  238.     end
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 载入地图资料
  242.   #--------------------------------------------------------------------------
  243.   def self.load_mapdata
  244.     $data_maps = {}
  245.     $data_mapinfos.each_key{ |mapid|
  246.       mapdata = Data_Map.new(mapid)
  247.       $data_maps[mapid] = mapdata
  248.     }
  249.   end
  250. end
  251. module Cache
  252.   #--------------------------------------------------------------------------
  253.   # ● 载入地图图片
  254.   #--------------------------------------------------------------------------
  255.   def self.load_map(filename)
  256.     load_bitmap("Graphics/Maps/", filename)
  257.   end
  258. end
  259. class Game_Map
  260.   #--------------------------------------------------------------------------
  261.   # ● 地图设置
  262.   #--------------------------------------------------------------------------
  263.   alias worldmap_setup setup
  264.   def setup(map_id)
  265.     worldmap_setup(map_id)
  266.     $data_maps[map_id].visit
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ● 返回当前地图资讯
  270.   #--------------------------------------------------------------------------
  271.   def current_map_data
  272.     return $data_maps[@map_id]
  273.   end
  274. end
复制代码
介面:

  1. class Window_MapList < Window_ItemList
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化
  4.   #--------------------------------------------------------------------------
  5.   def initialize(x, y, width, height)
  6.     super(x, y, width, height)
  7.     self.height = fitting_height(1)
  8.     self.arrows_visible = false
  9.     make_item_list
  10.     create_contents
  11.     select_map($game_map.current_map_data)
  12.     refresh
  13.     select_map(current_map_adjust)
  14.     self.opacity = 0
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 最大栏数
  18.   #--------------------------------------------------------------------------
  19.   def col_max
  20.     return 1
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 判断是否有效
  24.   #--------------------------------------------------------------------------
  25.   def enable?(map=@data[index])
  26.     return map.can_use?
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 返回当前选中的地图
  30.   #--------------------------------------------------------------------------
  31.   def map
  32.     return item
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 返回全部地图
  36.   #--------------------------------------------------------------------------
  37.   def maps
  38.     return @data
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 生成项目列表
  42.   #--------------------------------------------------------------------------
  43.   def make_item_list
  44.     $data_maps.each_value{|map|
  45.       @data.push(map) if map.can_list?
  46.     }
  47.     if @data.empty?
  48.       @data.push(nil)
  49.     else
  50.       @sort_map_x = @data.sort{|a, b| a.world_x <=> b.world_x}
  51.       @sort_map_y = @data.sort{|a, b| a.world_y <=> b.world_y}
  52.     end
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 绘制项目
  56.   #--------------------------------------------------------------------------
  57.   def refresh
  58.     contents.clear
  59.     if map
  60.       # 获取文字颜色
  61.       change_color(text_color(map.name_color), enable?(map))
  62.       width = text_size(map.name).width
  63.       x = (self.width - width)/2
  64.       make_font_smaller # 文字大小变小
  65.       draw_text(x, 0, 172, line_height, map.name)
  66.       reset_font_settings # 重设文字设定
  67.       # 调整座标
  68.       x = map.world_x - self.width/2
  69.       bitmap = Cache.load_map(map.world_img)
  70.       y = map.world_y + bitmap.height/2 - self.standard_padding
  71.       y += help_window.height if help_window
  72.       self.x = x
  73.       self.y = y
  74.     end
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 获取文字颜色
  78.   #--------------------------------------------------------------------------
  79.   def change_color(color, enabled = true)
  80.     if enabled
  81.       contents.font.color.set(color)
  82.     else
  83.       contents.font.color.set(Color.new(100, 100, 100))
  84.     end
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 按下方向左键
  88.   #--------------------------------------------------------------------------
  89.   def cursor_left(wrap = false)
  90.     change_curser(@sort_map_x, 4)
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 按下方向右键
  94.   #--------------------------------------------------------------------------
  95.   def cursor_right(wrap = false)
  96.     change_curser(@sort_map_x, 6)
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 按下方向上键
  100.   #--------------------------------------------------------------------------
  101.   def cursor_up(wrap = false)
  102.     change_curser(@sort_map_y, 8)
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 按下方向下键
  106.   #--------------------------------------------------------------------------
  107.   def cursor_down(wrap = false)
  108.     change_curser(@sort_map_y, 2)
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 按下方向键
  112.   #--------------------------------------------------------------------------
  113.   def change_curser(array, direction)
  114.     return if array.nil? || array.empty?
  115.     #return unless array.include?(map)
  116.     index = array.index(current_map_adjust)
  117.     case direction
  118.     when 4, 8 # 按左右键时
  119.       if index == 0
  120.         index = array.size - 1
  121.       else
  122.         index -= 1
  123.       end
  124.     when 2, 6 # 按上下键时
  125.       if index == array.size-1
  126.         index = 0
  127.       else
  128.         index += 1
  129.       end
  130.     else
  131.       return
  132.     end
  133.     real_index = @data.index(array[index]) # 获取真实index
  134.     select(real_index) # 选择地图
  135.     refresh # 刷新窗口
  136.   end
  137.   def current_map_adjust
  138.     return map if map
  139.     actual_map = $data_maps[$game_map.current_map_data.parent_id_on_map]
  140.     return actual_map
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 更新游标
  144.   #--------------------------------------------------------------------------
  145.   def update_cursor
  146.     cursor_rect.empty if cursor_rect.height > 0 # 将游标隐藏
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 选择地图
  150.   #--------------------------------------------------------------------------
  151.   def select_map(map)
  152.     i = @data.index(map)
  153.     select(i)
  154.   end
  155. end
  156. class Window_MapChoices < Window_Command
  157.   #--------------------------------------------------------------------------
  158.   # ● 生成命令
  159.   #--------------------------------------------------------------------------
  160.   def make_command_list
  161.     add_command("传送到这里", :transfer)
  162.     add_command("详细资料", :description)
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 设置命令有效度
  166.   #--------------------------------------------------------------------------
  167.   def set_command_enable(index, enable)
  168.     @list[index][:enabled] = enable
  169.     redraw_item(index)
  170.   end
  171. end
  172. class Window_MapDetail < Window_Selectable
  173.   attr_reader :map
  174.   #--------------------------------------------------------------------------
  175.   # ● 初始化
  176.   #--------------------------------------------------------------------------
  177.   def initialize(x, y, width, height)
  178.     super(x, y, width, height)
  179.     @map = nil
  180.     @show_desc = false
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 设置地图
  184.   #--------------------------------------------------------------------------
  185.   def map=(m)
  186.     @map = m
  187.     refresh
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 窗口刷新
  191.   #--------------------------------------------------------------------------
  192.   def refresh
  193.     return unless @map
  194.     contents.clear
  195.     if @map.detail_image != ""
  196.       draw_detail_image
  197.     else
  198.       @show_desc = @map.full_desc != ""
  199.     end
  200.     draw_full_desc if @show_desc
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 绘制详细图像
  204.   #--------------------------------------------------------------------------
  205.   def draw_detail_image
  206.     dest_rect = Rect.new(0, 0, self.width-24, self.height-24)
  207.     src_bitmap = Cache.load_map(@map.detail_image)
  208.     src_rect = Rect.new(0, 0, src_bitmap.width, src_bitmap.height)
  209.     opacity = @show_desc ? 128 : 255
  210.     contents.stretch_blt(dest_rect, src_bitmap, src_rect, opacity)
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 绘制详细资讯
  214.   #--------------------------------------------------------------------------
  215.   def draw_full_desc
  216.     draw_text_ex(0, 0, @map.full_desc)
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 按下确认键时
  220.   #--------------------------------------------------------------------------
  221.   def process_ok
  222.     if @map.full_desc != ""
  223.       Sound.play_ok
  224.       @show_desc = !@show_desc
  225.       refresh
  226.     else
  227.       Sound.play_buzzer
  228.     end
  229.   end
  230. end
  231. class Scene_WorldMap < Scene_Base
  232.   #--------------------------------------------------------------------------
  233.   # ● 场景开始
  234.   #--------------------------------------------------------------------------
  235.   def start
  236.     super
  237.     @sprites=[]
  238.     create_map_description_window
  239.     create_map_list_window
  240.     create_choice_window
  241.     create_map_detail_window
  242.     create_world_map
  243.     create_location_sprite
  244.     create_player_sprite
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ● 生成地图列表窗口
  248.   #--------------------------------------------------------------------------
  249.   def create_map_list_window
  250.     y = @map_desc_window.height
  251.     @map_list_window = Window_MapList.new(0, y, 160, Graphics.height-48)
  252.     @map_list_window.viewport = @viewport
  253.     @map_list_window.set_handler(:ok, method(:on_map_ok))
  254.     @map_list_window.set_handler(:cancel, method(:on_map_cancel))
  255.     @map_list_window.help_window = @map_desc_window
  256.     @map_list_window.refresh
  257.     @map_list_window.activate
  258.     @current_map = $game_map.current_map_data
  259.     @selected_map = @map_list_window.map
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 生成地图说明窗口
  263.   #--------------------------------------------------------------------------
  264.   def create_map_description_window
  265.     @map_desc_window = Window_Help.new(1)
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 生成选项窗口
  269.   #--------------------------------------------------------------------------
  270.   def create_choice_window
  271.     @choice_window = Window_MapChoices.new(0, 0)
  272.     @choice_window.x = (Graphics.width - @choice_window.width)/2
  273.     @choice_window.y = (Graphics.height - @choice_window.height)/2
  274.     @choice_window.viewport = @viewport
  275.     @choice_window.set_handler(:transfer, method(:do_player_transfer))
  276.     @choice_window.set_handler(:description, method(:show_full_desc))
  277.     @choice_window.set_handler(:cancel, method(:choice_cancel))
  278.     @choice_window.deactivate.hide
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 生成详细资讯窗口
  282.   #--------------------------------------------------------------------------
  283.   def create_map_detail_window
  284.     y = @map_desc_window.height
  285.     width = 384
  286.     height = Graphics.height - y
  287.     @detail_window = Window_MapDetail.new(0, y, width, height)
  288.     @detail_window.x = (Graphics.width - @detail_window.width)/2
  289.     @detail_window.viewport = @viewport
  290.     @detail_window.set_handler(:ok, method(:update))
  291.     @detail_window.set_handler(:cancel, method(:detail_cancel))
  292.     @detail_window.deactivate.hide
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● 生成世界地图精灵
  296.   #--------------------------------------------------------------------------
  297.   def create_world_map
  298.     @world_map_sprite = Sprite.new(@viewport)
  299.     src_bitmap = Cache.load_map("world")
  300.     width = Graphics.width
  301.     height = Graphics.height - @map_desc_window.height
  302.     dest_bitmap = Bitmap.new(width, height)
  303.     dest_bitmap.stretch_blt(dest_bitmap.rect, src_bitmap, src_bitmap.rect)
  304.     @world_map_sprite.bitmap = dest_bitmap
  305.     @world_map_sprite.x = 0
  306.     @world_map_sprite.y = @map_desc_window.height
  307.     @sprites.push(@world_map_sprite)
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ● 生成当前主角精灵
  311.   #--------------------------------------------------------------------------
  312.   def create_player_sprite
  313.     @player_sprite = Sprite.new(@viewport)
  314.     @player_sprite.bitmap = Cache.load_map("player")
  315.     update_player_sprite
  316.     @player_sprite.x = @current_map.player_x - @player_sprite.width/2
  317.     @player_sprite.y = @current_map.player_y - @player_sprite.height/2
  318.     @player_sprite.x += sprite_dx
  319.     @player_sprite.y += sprite_dy
  320.     @player_sprite.z = @selected_sprite.z + 10
  321.     @sprites.push(@player_sprite)
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 生成地图位置精灵
  325.   #--------------------------------------------------------------------------
  326.   def create_location_sprite
  327.     @location_sprites= []
  328.     @map_list_window.maps.each{ |map|
  329.       l_sprite = Sprite.new(@viewport)
  330.       create_a_map_sprite(l_sprite, map)
  331.       @location_sprites.push(l_sprite)
  332.     }
  333.     update_location_sprites
  334.     @selected_sprite = Sprite.new(@viewport)
  335.     @sprites.push(@selected_sprite)
  336.     @sprites += @location_sprites
  337.     create_select_sprite
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● 生成选择精灵
  341.   #--------------------------------------------------------------------------
  342.   def create_select_sprite
  343.     create_a_map_sprite(@selected_sprite, @selected_map, "select")
  344.     @selected_sprite.z = current_sprite.z+10
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 生成一个地图位置精灵
  348.   #--------------------------------------------------------------------------
  349.   def create_a_map_sprite(sprite, map, image="")
  350.     return unless map
  351.     image = map.world_img if image==""
  352.     sprite.bitmap = Cache.load_map(image)
  353.     sprite.x = map.world_x - sprite.width/2
  354.     sprite.y = map.world_y - sprite.height/2
  355.     sprite.x += sprite_dx
  356.     sprite.y += sprite_dy
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● 选择地图结束
  360.   #--------------------------------------------------------------------------
  361.   def on_map_ok
  362.     @map_list_window.deactivate
  363.     @choice_window.set_command_enable(0, @selected_map.can_transfer?)
  364.     @choice_window.set_command_enable(1, @selected_map.known?)
  365.     @choice_window.activate.show
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● 执行角色传送
  369.   #--------------------------------------------------------------------------
  370.   def do_player_transfer
  371.     map = @map_list_window.map
  372.     id = map.id
  373.     x = map.land_x
  374.     y = map.land_y
  375.     $game_player.reserve_transfer(id, x, y)
  376.     SceneManager.goto(Scene_Map)
  377.   end
  378.   #--------------------------------------------------------------------------
  379.   # ● 返回地图场景
  380.   #--------------------------------------------------------------------------
  381.   def on_map_cancel
  382.     SceneManager.call(Scene_Map)
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ● 显示详细资讯窗口
  386.   #--------------------------------------------------------------------------
  387.   def show_full_desc
  388.     @detail_window.activate.show
  389.     @detail_window.map = @selected_map
  390.     @choice_window.deactivate.hide
  391.   end
  392.   #--------------------------------------------------------------------------
  393.   # ● 取消选项
  394.   #--------------------------------------------------------------------------
  395.   def choice_cancel
  396.     @map_list_window.activate
  397.     @choice_window.deactivate.hide
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ● 跳出详细资讯窗口
  401.   #--------------------------------------------------------------------------
  402.   def detail_cancel
  403.     @detail_window.deactivate.hide
  404.     @map_list_window.activate
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● 场景更新
  408.   #--------------------------------------------------------------------------
  409.   def update
  410.     super
  411.     update_player_sprite
  412.     update_location_sprites
  413.     $game_player.perform_transfer if $game_player.transfer?
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● 更新主角精灵
  417.   #--------------------------------------------------------------------------
  418.   def update_player_sprite
  419.     cw = @player_sprite.bitmap.width/3
  420.     ch = @player_sprite.bitmap.height
  421.     player_rect = Rect.new(0, 0, cw, ch)
  422.     sx = Graphics.frame_count/24%4
  423.     player_rect.x = sx*cw
  424.     player_rect.x = cw if sx==3
  425.     @player_sprite.src_rect.set(player_rect)
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● 更新位置精灵
  429.   #--------------------------------------------------------------------------
  430.   def update_location_sprites
  431.     if @selected_map != @map_list_window.map
  432.       @selected_map = @map_list_window.map
  433.       @selected_sprite.x = current_sprite.x
  434.       @selected_sprite.y = current_sprite.y
  435.     end
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 获取精灵位移座标
  439.   #--------------------------------------------------------------------------
  440.   def sprite_dx
  441.     @world_map_sprite.x
  442.   end
  443.   def sprite_dy
  444.     @world_map_sprite.y
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 获取当前选中的地图的精灵
  448.   #--------------------------------------------------------------------------
  449.   def current_sprite
  450.     return @location_sprites[@map_list_window.index]
  451.   end
  452. end
  453. class Game_Interpreter
  454.   #--------------------------------------------------------------------------
  455.   # ● 呼叫世界地图场景
  456.   #--------------------------------------------------------------------------
  457.   def call_world_map
  458.     SceneManager.call(Scene_WorldMap)
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # ● 手动设定“已知”标记
  462.   #--------------------------------------------------------------------------
  463.   def know_map(id)
  464.     $data_maps[id].know
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ● 取消“已知”标记
  468.   #--------------------------------------------------------------------------
  469.   def unknow_map(id)
  470.     $data_maps[id].unknow
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ● 取消“已造访”标记
  474.   #--------------------------------------------------------------------------
  475.   def unvisit_map(id)
  476.     $data_maps[id].unvisit
  477.   end
  478. end
复制代码
设定:(请模仿这一段填写地图资讯)
  1. module DataManager
  2.   def self.map_data_setup
  3.     $data_maps[3].full_desc = "\\C[2]故事开始之处。\\C[1]这是资讯这是资讯这是资讯
  4. 这是资讯这是资讯这是资讯这是资讯这是资讯这是资讯这是资讯这是资讯
  5. 这是资讯这是资讯这是资讯这是资讯"
  6.   end
  7. end
复制代码

choice.png (81.45 KB, 下载次数: 38)

选项

选项

detail.png (197.61 KB, 下载次数: 42)

详细资讯窗口

详细资讯窗口

main_screen.png (70.07 KB, 下载次数: 71)

主介面

主介面

点评

只有1.0才能下···  发表于 2012-10-22 12:37

评分

参与人数 5星屑 +674 收起 理由
超级D梦 + 4 支持
倾灬城 + 8 下不了球百度网盘分享QUQ
忧雪の伤 + 600 奖赏条例
zjd540921697 + 2 要是xp的就更好了
凌童鞋 + 60

查看全部评分

VA脚本开工中...
偷窃脚本1.0 - 已完成

Lv1.梦旅人

梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
帖子
1658
2
发表于 2012-3-6 16:17:11 | 只看该作者
哇唔,是个好东西呢~
终于可以摆脱上一页/下一页的时代了~
只是这个脚本貌似只适用于高自由度游戏吧?

点评

我也可以做到啊,但是也要承认,那玩意太吃美工了~很多时候我宁可费点事也不想做图片选单···  发表于 2012-3-6 21:57
其实……可以用图片做选项……反正我的世界地图是纯事件+美工Orz  发表于 2012-3-6 21:56
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
140 小时
注册时间
2012-2-6
帖子
384
3
发表于 2012-3-6 17:01:49 | 只看该作者
狂暴的顶。
LZ是我见过的最勤劳脚本编写者
签名是什么?可以吃么?
回复 支持 反对

使用道具 举报

菜鸟飞呀飞 该用户已被删除
4
发表于 2012-3-6 17:42:25 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
25 小时
注册时间
2012-2-25
帖子
10
5
发表于 2012-3-6 21:08:20 | 只看该作者
本帖最后由 diandiangel 于 2012-3-6 21:09 编辑

使用这个脚本估计地图要够大吧,不然还是自己走走比较好0 0
不过这个脚本太有用了~~
华为的网盘还要申请,好吧,我承认我懒orz

评分

参与人数 1星屑 -10 收起 理由
Kimu -10 研究半天还是觉得水了

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
610
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

6
 楼主| 发表于 2012-3-6 21:51:32 | 只看该作者
又加了一個連結
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

星君

梦石
0
星屑
83
在线时间
2980 小时
注册时间
2011-10-9
帖子
2317

贵宾短篇七萝莉正太组冠军

7
发表于 2012-3-6 21:57:21 | 只看该作者
列表貌似有点长了0 0

回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
610
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

8
 楼主| 发表于 2012-3-11 01:21:05 | 只看该作者
更新日志:
* 2012-03-10 更新 v1.5
* 介面更新:隐藏地图列表窗口,放大世界地图区域
             使用方向键选择目标
* 新增功能:地图名称颜色
             使用 [name_color X] 指定文字颜色,没有指定的默认为 0
             无法传送又未知的地图则以灰色显示
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
58 小时
注册时间
2012-1-1
帖子
38
9
发表于 2012-3-11 16:53:15 | 只看该作者
那个 v1.5 115文件未分享
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
301
在线时间
573 小时
注册时间
2005-10-27
帖子
1164
10
发表于 2012-3-11 18:23:59 | 只看该作者
貌似可以用来模仿口袋妖怪的飞空术~嘿嘿嘿嘿……

评分

参与人数 1星屑 -10 收起 理由
Kimu -10

查看全部评分

认真地猥琐,猥琐地认真
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-26 00:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表