Project1

标题: 地图名显示(可自定义) [打印本页]

作者: 天地有正气    时间: 2013-9-7 14:31
标题: 地图名显示(可自定义)
本帖最后由 天地有正气 于 2013-9-7 14:48 编辑

[qq]865657904[/qq]
  1. $地名 = "no"
  2. $地名X坐标 = 120
  3. $地名Y坐标 = 10
  4. $地名不透明度 = 180
  5. $地名内容不透明度 = 255
  6. $地名宽 = 420
  7. $地名高 = 64
  8. class Window_WindowName < Window_Base
  9.   def initialize
  10.     super(0, 0, 0, 0)
  11.     self.opacity = $地名不透明度
  12.     self.x = $地名X坐标
  13.     self.y = $地名Y坐标
  14.     self.contents_opacity = $地名内容不透明度
  15.     self.width = $地名宽
  16.     self.height = $地名高
  17.     self.contents = Bitmap.new(width - 32, height - 32)
  18.     refresh
  19.   end
  20.   def refresh
  21.     self.contents.clear
  22.     cx = contents.text_size($地名).width
  23.     self.contents.font.color = Color.new(255, 255, 255)
  24.     self.contents.draw_text($地名宽/2-cx/2-16, 0, cx, 32, $地名.to_s)
  25.   end
  26. end
  27. class Scene_Map
  28.   #--------------------------------------------------------------------------
  29.   # ● 主处理
  30.   #--------------------------------------------------------------------------
  31.   def main
  32.     # 生成活动块
  33.     @spriteset = Spriteset_Map.new
  34.     # 生成信息窗口
  35.     @message_window = Window_Message.new
  36.     @window_windowname = Window_WindowName.new
  37.     # 执行过渡
  38.     Graphics.transition
  39.     # 主循环
  40.     loop do
  41.       # 刷新游戏画面
  42.       Graphics.update
  43.       # 刷新输入信息
  44.       Input.update
  45.       # 刷新画面
  46.       update
  47.       # 如果画面切换的话就中断循环
  48.       if $scene != self
  49.         break
  50.       end
  51.     end
  52.     # 准备过渡
  53.     Graphics.freeze
  54.     # 释放活动块
  55.     @spriteset.dispose
  56.     # 释放信息窗口
  57.     @message_window.dispose
  58.     @window_windowname.dispose
  59.     # 标题画面切换中的情况下
  60.     if $scene.is_a?(Scene_Title)
  61.       # 淡入淡出画面
  62.       Graphics.transition
  63.       Graphics.freeze
  64.     end
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 刷新画面
  68.   #--------------------------------------------------------------------------
  69.   def update
  70.     # 循环
  71.     loop do
  72.       # 按照地图、实例、主角的顺序刷新
  73.       # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
  74.       #  的机会的重要因素)
  75.       $game_map.update
  76.       $game_system.map_interpreter.update
  77.       $game_player.update
  78.       # 系统 (计时器)、画面刷新
  79.       $game_system.update
  80.       $game_screen.update
  81.       # 如果主角在场所移动中就中断循环
  82.       unless $game_temp.player_transferring
  83.         break
  84.       end
  85.       # 执行场所移动
  86.       transfer_player
  87.       # 处理过渡中的情况下、中断循环
  88.       if $game_temp.transition_processing
  89.         break
  90.       end
  91.     end
  92.     # 刷新活动块
  93.     @spriteset.update
  94.     # 刷新信息窗口
  95.     @message_window.update
  96.     @window_windowname.update
  97.     # 游戏结束的情况下
  98.     if $game_temp.gameover
  99.       # 切换的游戏结束画面
  100.       $scene = Scene_Gameover.new
  101.       return
  102.     end
  103.     # 返回标题画面的情况下
  104.     if $game_temp.to_title
  105.       # 切换到标题画面
  106.       $scene = Scene_Title.new
  107.       return
  108.     end
  109.     # 处理过渡中的情况下
  110.     if $game_temp.transition_processing
  111.       # 清除过渡处理中标志
  112.       $game_temp.transition_processing = false
  113.       # 执行过渡
  114.       if $game_temp.transition_name == ""
  115.         Graphics.transition(20)
  116.       else
  117.         Graphics.transition(40, "Graphics/Transitions/" +
  118.           $game_temp.transition_name)
  119.       end
  120.     end
  121.     # 显示信息窗口中的情况下
  122.     if $game_temp.message_window_showing
  123.       return
  124.     end
  125.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  126.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  127.       # 不是在事件执行中或者禁止遇敌中
  128.       unless $game_system.map_interpreter.running? or
  129.              $game_system.encounter_disabled
  130.         # 确定队伍
  131.         n = rand($game_map.encounter_list.size)
  132.         troop_id = $game_map.encounter_list[n]
  133.         # 队伍有效的话
  134.         if $data_troops[troop_id] != nil
  135.           # 设置调用战斗标志
  136.           $game_temp.battle_calling = true
  137.           $game_temp.battle_troop_id = troop_id
  138.           $game_temp.battle_can_escape = true
  139.           $game_temp.battle_can_lose = false
  140.           $game_temp.battle_proc = nil
  141.         end
  142.       end
  143.     end
  144.     # 按下 B 键的情况下
  145.     if Input.trigger?(Input::B)
  146.       # 不是在事件执行中或菜单禁止中
  147.       unless $game_system.map_interpreter.running? or
  148.              $game_system.menu_disabled
  149.         # 设置菜单调用标志以及 SE 演奏
  150.         $game_temp.menu_calling = true
  151.         $game_temp.menu_beep = true
  152.       end
  153.     end
  154.     # 调试模式为 ON 并且按下 F9 键的情况下
  155.     if $DEBUG and Input.press?(Input::F9)
  156.       # 设置调用调试标志
  157.       $game_temp.debug_calling = true
  158.     end
  159.     # 不在主角移动中的情况下
  160.     unless $game_player.moving?
  161.       # 执行各种画面的调用
  162.       if $game_temp.battle_calling
  163.         call_battle
  164.       elsif $game_temp.shop_calling
  165.         call_shop
  166.       elsif $game_temp.name_calling
  167.         call_name
  168.       elsif $game_temp.menu_calling
  169.         call_menu
  170.       elsif $game_temp.save_calling
  171.         call_save
  172.       elsif $game_temp.debug_calling
  173.         call_debug
  174.       end
  175.     end
  176.   end
  177. end
复制代码
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上为不负责任的脚本、、、、、、、虽然也能用。。。。真正的在下面:
  1. # 超烂地图名显示 by 小周
  2. # 功能:显示地图名,可以自定义一些属性。
  3. =begin
  4. 这是一个不负责任的地图名显示,虽然只有短短的十几行,
  5. 但这是小周写的第一个还算是比较实用的功能。特点是注
  6. 释比较全面,适合刚想研究脚本的和小周一样的新手查看
  7. 研究。
  8. =end
  9. class Window_WindowName < Window_Base
  10.   # 用 class 新建一个类用来显示地图
  11.   # 这里的 “< Window_Base”意思是
  12.   # 说这个 Window_WindowName 新类是
  13.   # Window_Base 的子类
  14.   # 这样写好处是可以继承 Window_Base
  15.   # 的定义,从而少些很多内容。
  16.   def initialize
  17.     # 初始化 新建一个方法
  18.     super(0, 0, 0, 0)
  19.     # 使用继承自Window_Base的方法
  20.     # 框中数字的顺序为 x,y,width(宽),height(高)
  21.     # 但是因为后面可以自己修改所以这里写什么都无所谓
  22.     self.opacity = $地名不透明度
  23.     # 定义窗口的不透明度
  24.     # self是指本身的意思
  25.     # 小贴士:如果遇到不理解的代码可以用有道词典查
  26.     # 意思基本相同
  27.     # 理解意思后就能够容易的明白代码的意思了
  28.     # 而这里的不透明度使用的是全局变量
  29.     # 这样做可以方便修改不透明度
  30.     self.x = $地名X坐标
  31.     # X值加入全局变量,这就是为什么可以随意调整X坐标的原因
  32.     self.y = $地名Y坐标
  33.     # Y值加入全局变量,这就是为什么可以随意调整Y坐标的原因
  34.     self.contents_opacity = $地名内容不透明度
  35.     # 内容不透明度的值代入全局变量,方便修改
  36.     self.width = $地名宽
  37.     # 宽度代入全局变量,方便修改
  38.     self.height = $地名高
  39.     # 高度代入全局变量,方便修改
  40.     self.contents = Bitmap.new(width - 32, height - 32)
  41.     # 其实这个我也不怎么理解,总之写窗口一定要有这句
  42.     # 不然如果在窗口里面描绘文字、字符串等内容时会有
  43.     # 显示不全的状况。
  44.     refresh
  45.     # 跳转到下面的刷新
  46.   end
  47.   # def的end
  48.   def refresh
  49.     # 刷新 建立一个新方法
  50.     self.contents.clear
  51.     # 清空内容
  52.     cx = contents.text_size($地名).width
  53.     # 计算地名的宽
  54.     self.contents.font.color = Color.new(255, 255, 255)
  55.     # 设置字体颜色
  56.     self.contents.draw_text($地名宽/2-cx/2-16, 0, cx, 32, $地名.to_s)
  57.     # 描绘地名 地名后要加.to_s使地名变成一个字符串
  58.     # draw_text后面的格式也是x,y,width,height,这是对于
  59.     # 这个窗口而言的数值,
  60.     # cx是文字的宽度
  61.     # 刚才已经计算过了
  62.     # 第一个$地名宽/2-cx/2-16是我想了好久才想出来的
  63.     # 一个使文字居中的算法,这样写能够使字居中
  64.     # 如果想使文字靠左,把它们改为0就行了。
  65.   end
  66.   # def的end
  67. end
  68. # class的end
复制代码
这些注释写的应该都很明白了吧= =这是小周学写脚本后第二个小功能(第一个请见讨论区)
但是如果想让他显现出来的话就在这个脚本下面加上另一段Scene_Map的修改:
  1. class Scene_Map
  2.   #--------------------------------------------------------------------------
  3.   # ● 主处理
  4.   #--------------------------------------------------------------------------
  5.   def main
  6.     # 生成活动块
  7.     @spriteset = Spriteset_Map.new
  8.     # 生成信息窗口
  9.     @message_window = Window_Message.new
  10.     @window_windowname = Window_WindowName.new
  11.     # 执行过渡
  12.     Graphics.transition
  13.     # 主循环
  14.     loop do
  15.       # 刷新游戏画面
  16.       Graphics.update
  17.       # 刷新输入信息
  18.       Input.update
  19.       # 刷新画面
  20.       update
  21.       # 如果画面切换的话就中断循环
  22.       if $scene != self
  23.         break
  24.       end
  25.     end
  26.     # 准备过渡
  27.     Graphics.freeze
  28.     # 释放活动块
  29.     @spriteset.dispose
  30.     # 释放信息窗口
  31.     @message_window.dispose
  32.     @window_windowname.dispose
  33.     # 标题画面切换中的情况下
  34.     if $scene.is_a?(Scene_Title)
  35.       # 淡入淡出画面
  36.       Graphics.transition
  37.       Graphics.freeze
  38.     end
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 刷新画面
  42.   #--------------------------------------------------------------------------
  43.   def update
  44.     # 循环
  45.     loop do
  46.       # 按照地图、实例、主角的顺序刷新
  47.       # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
  48.       #  的机会的重要因素)
  49.       $game_map.update
  50.       $game_system.map_interpreter.update
  51.       $game_player.update
  52.       # 系统 (计时器)、画面刷新
  53.       $game_system.update
  54.       $game_screen.update
  55.       # 如果主角在场所移动中就中断循环
  56.       unless $game_temp.player_transferring
  57.         break
  58.       end
  59.       # 执行场所移动
  60.       transfer_player
  61.       # 处理过渡中的情况下、中断循环
  62.       if $game_temp.transition_processing
  63.         break
  64.       end
  65.     end
  66.     # 刷新活动块
  67.     @spriteset.update
  68.     # 刷新信息窗口
  69.     @message_window.update
  70.     @window_windowname.update
  71.     # 游戏结束的情况下
  72.     if $game_temp.gameover
  73.       # 切换的游戏结束画面
  74.       $scene = Scene_Gameover.new
  75.       return
  76.     end
  77.     # 返回标题画面的情况下
  78.     if $game_temp.to_title
  79.       # 切换到标题画面
  80.       $scene = Scene_Title.new
  81.       return
  82.     end
  83.     # 处理过渡中的情况下
  84.     if $game_temp.transition_processing
  85.       # 清除过渡处理中标志
  86.       $game_temp.transition_processing = false
  87.       # 执行过渡
  88.       if $game_temp.transition_name == ""
  89.         Graphics.transition(20)
  90.       else
  91.         Graphics.transition(40, "Graphics/Transitions/" +
  92.           $game_temp.transition_name)
  93.       end
  94.     end
  95.     # 显示信息窗口中的情况下
  96.     if $game_temp.message_window_showing
  97.       return
  98.     end
  99.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  100.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  101.       # 不是在事件执行中或者禁止遇敌中
  102.       unless $game_system.map_interpreter.running? or
  103.              $game_system.encounter_disabled
  104.         # 确定队伍
  105.         n = rand($game_map.encounter_list.size)
  106.         troop_id = $game_map.encounter_list[n]
  107.         # 队伍有效的话
  108.         if $data_troops[troop_id] != nil
  109.           # 设置调用战斗标志
  110.           $game_temp.battle_calling = true
  111.           $game_temp.battle_troop_id = troop_id
  112.           $game_temp.battle_can_escape = true
  113.           $game_temp.battle_can_lose = false
  114.           $game_temp.battle_proc = nil
  115.         end
  116.       end
  117.     end
  118.     # 按下 B 键的情况下
  119.     if Input.trigger?(Input::B)
  120.       # 不是在事件执行中或菜单禁止中
  121.       unless $game_system.map_interpreter.running? or
  122.              $game_system.menu_disabled
  123.         # 设置菜单调用标志以及 SE 演奏
  124.         $game_temp.menu_calling = true
  125.         $game_temp.menu_beep = true
  126.       end
  127.     end
  128.     # 调试模式为 ON 并且按下 F9 键的情况下
  129.     if $DEBUG and Input.press?(Input::F9)
  130.       # 设置调用调试标志
  131.       $game_temp.debug_calling = true
  132.     end
  133.     # 不在主角移动中的情况下
  134.     unless $game_player.moving?
  135.       # 执行各种画面的调用
  136.       if $game_temp.battle_calling
  137.         call_battle
  138.       elsif $game_temp.shop_calling
  139.         call_shop
  140.       elsif $game_temp.name_calling
  141.         call_name
  142.       elsif $game_temp.menu_calling
  143.         call_menu
  144.       elsif $game_temp.save_calling
  145.         call_save
  146.       elsif $game_temp.debug_calling
  147.         call_debug
  148.       end
  149.     end
  150.   end
  151. end
复制代码
这样,,,还是不行。。。
请在这两个脚本之前在加入这些内容:
  1. $地名 = "农村"
  2. $地名X坐标 = 120
  3. $地名Y坐标 = 10
  4. $地名不透明度 = 180
  5. $地名内容不透明度 = 255
  6. $地名宽 = 420
  7. $地名高 = 64
复制代码
这些是属性的设定,可以自己更改。
如果想在游戏中更改的话只要用事件命令中的“脚本”就可以了
对了,还要注意,地图名是要手动修改“$地名”的,别忘了。
如果不想现实的话,只要将地名不透明度和地名内容不透明度
设为零就好了,(可以设置第一次进入时先不显示地名,而是显示图片)
最后,说一下这个脚本的冲突性应该是=0的,此脚本拓展性很高,自己
加一点内容就可以做到一些效果,注释写得都很明白了。
------------------------------------------------------------------------------------------------------------------------
很无耻的给我们百度rmxp团队吧打打广告:
点击进入,百度RMXP团队吧!!!
作者: 恐惧剑刃    时间: 2013-9-7 16:11
你可以根据这个模版改进下的
  1. ###########
  2. #by 薄凉看客
  3. #使用方法事件脚本中输入map_name_blkk
  4. ###########
  5. class Interpreter
  6.   def map_name_blkk
  7.     map_name = load_data("Data/MapInfos.rxdata")
  8.     w = Window_Base.new(190, 20, 260, 64)
  9.     w.opacity = 0;w.contents_opacity = 0
  10.     w.contents = Bitmap.new(260-32, 64-32)
  11.     w.contents.font.color = Color.new(50,
  12.     255, 80, 255);tex = map_name[$game_map.map_id].name
  13.     w.contents.draw_text(4, 0, w.width, 32, tex)
  14.     for i in 0..20;Graphics.update;
  15.     w.opacity += 10;w.contents_opacity += 10;
  16.     w.y += 7;end;
  17.     for i in 0..50;Graphics.update;end
  18.     for i in 0..20;Graphics.update;w.opacity -=
  19.     10;w.contents_opacity -= 10;end;w.dispose
  20.   end  
  21. end  
复制代码

作者: 天地有正气    时间: 2013-9-7 16:32
恋′挂机 发表于 2013-9-7 16:11
你可以根据这个模版改进下的

多谢指导!
但是小周觉得这样改就偏离了我的原意了。
我这个脚本想达成两个目的:
1.能够让和我一样的新人通过看我的注释多多少少学到些东西。
2.我希望这个脚本可以自己定义所有属性。
这样改的话,第一个只要我再勤奋一下,注释注释就可以了,但第二个就不行了。
这样写调用了一个系统文件,与我想要的“自由”脚本不一样,所以我一开始就没有用。
这样写可能方便些,但是调用的都是地图名,不能自己设定的呢= =
作者: 恐惧剑刃    时间: 2013-9-7 16:47
天地有正气 发表于 2013-9-7 16:32
多谢指导!
但是小周觉得这样改就偏离了我的原意了。
我这个脚本想达成两个目的:

修改版,可以给参数map_name_blkk(x, y, width, height, contents)contents内容可有可无可以自定义地图名
设置了所有属性,希望对你有帮助,写的很乱,不是不想让别人看懂,而是为了减少行数。。
帮助新人的话开帖写教程吧~!本来想用attr_accessor :map_blkk_x;$game_temp.map_blkk_x等等的,一想算了还是直接给参数方便些。
  1. ###########
  2. #by 薄凉看客
  3. #使用方法事件脚本中输入map_name_blkk
  4. ###########
  5. class Interpreter
  6.   def map_name_blkk(x = 190, y = 20, wid = 260, hei = 64, contents = nil)
  7.     map_name = load_data("Data/MapInfos.rxdata");
  8.     w = Window_Base.new(x, y, wid, hei);w.opacity = 0;w.contents_opacity = 0
  9.     w.contents = Bitmap.new(wid-32, hei-32);w.contents.font.color = Color.new(50,
  10.     255, 80, 255);if contents == nil;tex = map_name[$game_map.map_id].name;else;
  11.     tex = contents;end;w.contents.draw_text(4, 0, w.width, 32, tex)
  12.     for i in 0..20;Graphics.update;w.opacity += 10;w.contents_opacity += 10;
  13.     w.y += 7;end;for i in 0..50;Graphics.update;end
  14.     for i in 0..20;Graphics.update;w.opacity -= 10;w.contents_opacity -= 10;
  15.     end;w.dispose;end; end
复制代码

作者: 天地有正气    时间: 2013-9-7 18:08
请注意,发现BUG,更改属性的事件一定要设成并行处理,否则不会反应!!!!原因不详!!!
作者: xujintao    时间: 2013-9-13 09:06
木有效果图?




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