Project1

标题: 存档界面显示角色名 [打印本页]

作者: tyq4590    时间: 2013-6-20 19:05
标题: 存档界面显示角色名
本帖最后由 tyq4590 于 2013-6-21 15:54 编辑

我想在va默认的Window_SaveFile里添加一项显示1号角色名字(注:是数据库里1号角色的名字而不是队伍里第一个角色的名字)的功能(由于我用了改名脚本,因此每个档案的1号角色的名字都不相同,因此可以藉此鉴别不同的存档)。不知应该怎么修改Window_SaveFile来达到这个效果呢?望高手指点!(由于我需要Va默认的存档界面排列格式,因此完全重写存档功能的那些脚本我无法使用!)

已经解决!
作者: j433463    时间: 2013-6-21 01:12
本帖最后由 j433463 于 2013-6-21 01:29 编辑

其实存档没有想像中难,在 DataManager 脚本中,有一个生成存档的头数据 def self.make_save_header 专门用来放存档档头资料的,

什么意思呢?就是在存档与读档画面中的那些东西,如图:



存档 2 中,有队伍角色行走图,有存档游戏时间,这些就是放在存档头数据中的,在 def self.make_save_header 程序是这样子:

RUBY 代码复制
  1. def self.make_save_header
  2.     header = {} #建立一个空的 header hash
  3.     header[:characters] = $game_party.characters_for_savefile #建立名为 :characters 的 header 变量,存放 Game_Party 中 def characters_for_savefile 的结果
  4.     header[:playtime_s] = $game_system.playtime_s #建立名为 :playtime_s 的 header 变量,存放 Game_System 中 def playtime_s 的结果
  5.     header
  6.   end


这很明白了,characters_for_savefile 就是角色的图像讯息,也就行走图,它包含了 actor.character_name 和 actor.character_index,也就是行走图的档名和行走图中第几个图的索引,
playtime_s 就是游戏时间,这两个,也就是存档 2 的行走图和存档时间。

所以楼主要加上角色1的名字,很简单嘛!就是在这 def self.make_save_header 中把角色1 名字加进去,像这样:

RUBY 代码复制
  1. def self.make_save_header
  2.     header = {}
  3. header[:actor_1] = $game_actors[1].name
  4.     header[:characters] = $game_party.characters_for_savefile
  5.     header[:playtime_s] = $game_system.playtime_s
  6.     header
  7.   end


建立一个名为 :actor_1 的 header 变量,并且把 $game_actors[1].name 第一个角色的名字存放到这变量中,在存档时,档头就有第一个角色的名字了。

当然,这样只是存档而已,要怎么读档呢?那就是 Widnow_SaveFile 的工作,看这脚本名称您可能误会它是存档的脚本,其实不是,看看它最顶端的注解,

存档画面和读档画面中显示存档档案的视窗。

显示存档档案的视窗,意思就是存档和读档时的画面,就是上面那张存档 2 的那个画面,这脚本就是做这个事的,不要被脚本名骗了,

仔细看看 def refresh 的内容:

RUBY 代码复制
  1. def refresh
  2.     contents.clear #清空画面
  3.     change_color(normal_color) #改变颜色设定为正常色
  4.     name = Vocab::File + " #{@file_index + 1}" #name 名称格式为 存档n 也就是 存档1 存档2 ....
  5.     draw_text(4, 0, 200, line_height, name) #描绘 name
  6.     @name_width = text_size(name).width #取得 name 名称宽度
  7.     draw_party_characters(152, 58) #描绘角色行走图
  8.     draw_playtime(0, contents.height - line_height, contents.width - 4, 2) #描绘存档游戏时间
  9.   end


我想,看到这您也许就明白了,这一段就是在显示存档读档的画面,那个存档2,行走图和游戏时间,就是在这个地方描绘的,所以,要加上角色一的名称,就是找个地方自己加上去,

譬如:

RUBY 代码复制
  1. def refresh
  2.     contents.clear
  3.     change_color(normal_color)
  4.     name = Vocab::File + " #{@file_index + 1}"
  5.     draw_text(4, 0, 200, line_height, name)
  6.     @name_width = text_size(name).width
  7.     draw_party_characters(152, 58)
  8.     draw_playtime(0, contents.height - line_height, contents.width - 4, 2)
  9.  
  10.     header = DataManager.load_header(@file_index) #取得档头资料
  11.     return unless header #如果没有 header 档头资料就 return 结束这个 def
  12.     draw_text(100, 0, 200, line_height, header[:actor_1]) #在 100,0 的位置显示角色一的名字
  13.  
  14.   end


要注意的是档头资料一定要读取的动作,然后才能去描绘角色一的名字。

您看,不难吧?当您明白 VA 的存档读档,其实很容易改的,不像 XP 或 VX,需要做一些其它的补充,VA 的存读档就这么单纯直接。

之前有帖子问怎么把存档读档的行走图改成脸图,现在您想到没有?就是在 def self.make_save_header 那边加上战斗者的脸图档名和索引,

然后在 Window_SaveFile 这边的 def refresh 中,改掉 draw_party_characters(152, 58) 这个画行走图的方法,换成画脸图的就行了,

其实没有什么技巧的,很容易的,可是一般你不会知道,因为你没有注意 VA 的存档读档脚本内容,你就会以为很难,事实并不是。











作者: tyq4590    时间: 2013-6-21 11:54
j433463 发表于 2013-6-21 05:12
其实存档没有想像中难,在 DataManager 脚本中,有一个生成存档的头数据 def self.make_save_header 专门用 ...

非常感谢,自己昨天也看了一下存档header的部分,但是就是不知道该怎么去读取1号角色的名字。。。现在总算弄好了:






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