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

Project1

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

[已经解决] 在线等,用了诡异の猫的使用xp行走图的脚本之后

[复制链接]

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
671
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

跳转到指定楼层
1
发表于 2010-8-25 20:50:31 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 冰舞蝶恋 于 2010-8-25 21:20 编辑
  1. #########################
  2. #  XP 行走图显示法 v1.0 #
  3. #                       #
  4. #      BY 诡异の猫      #
  5. #########################
  6. class Game_Character
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对象
  9.   #--------------------------------------------------------------------------
  10.   alias old_ini initialize
  11.   def initialize
  12.     old_ini
  13.     @original_pattern = 2
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 矫正姿势
  17.   #--------------------------------------------------------------------------
  18.   def straighten
  19.     @pattern = 2 if @walk_anime or @step_anime
  20.     @anime_count = 0
  21.   end
  22. end

  23. class Sprite_Character < Sprite_Base
  24.   #--------------------------------------------------------------------------
  25.   # ● 更新传送源的位图
  26.   #--------------------------------------------------------------------------
  27.   def update_bitmap
  28.     if @tile_id != @character.tile_id or
  29.        @character_name != @character.character_name or
  30.        @character_index != @character.character_index
  31.       @tile_id = @character.tile_id
  32.       @character_name = @character.character_name
  33.       @character_index = @character.character_index
  34.       if @tile_id > 0
  35.         sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
  36.         sy = @tile_id % 256 / 8 % 16 * 32;
  37.         self.bitmap = tileset_bitmap(@tile_id)
  38.         self.src_rect.set(sx, sy, 32, 32)
  39.         self.ox = 16
  40.         self.oy = 32
  41.       else
  42.         self.bitmap = Cache.character(@character_name)
  43.         sign = @character_name[/^[\!\$]./]
  44.         if sign != nil and sign.include?('$')
  45.           @cw = bitmap.width / 4
  46.           @ch = bitmap.height / 4
  47.         else
  48.           @cw = bitmap.width / 16
  49.           @ch = bitmap.height / 8
  50.         end
  51.         self.ox = @cw / 2
  52.         self.oy = @ch
  53.       end
  54.     end
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 更新传送源矩形
  58.   #--------------------------------------------------------------------------
  59.   def update_src_rect
  60.     if @tile_id == 0
  61.       index = @character.character_index
  62.       pattern = @character.pattern < 4 ? @character.pattern : 1
  63.       sx = (index % 4 * 4 + pattern) * @cw
  64.       sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  65.       self.src_rect.set(sx, sy, @cw, @ch)
  66.     end
  67.   end
  68. end
复制代码
脚本如上。
可是,在商店界面、系统界面、截图存档等界面,显示却成了这样:

= =有什么办法把系统中的也改成4*4的行走图?
真的是在线等啊~~ 拜托帮个忙啦~~
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
671
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

20
 楼主| 发表于 2010-8-26 16:27:58 | 只看该作者
算了~~我直接把window_base和Sprite_Character里的切割行走图格式改了- -
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
65
在线时间
385 小时
注册时间
2007-7-27
帖子
4106

开拓者

19
发表于 2010-8-26 13:41:53 | 只看该作者
{:nm_9:}我觉得VX区是不是该写个脚本入门书目了
比如先看F1的入门部分,再看默认脚本,再把F1里面的RGSS参考给看了
就算不要求学会,至少要懂一些……
要不然直接让人去插脚本,遇到问题很难解决好

点评

把每句默认脚本都注释遍比啥都管用  发表于 2010-8-26 15:56
版主不能偷懒! 不过我觉得看完了F1就够了……  发表于 2010-8-26 13:51
TT来写!  发表于 2010-8-26 13:44
吸吸
回复 支持 反对

使用道具 举报

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
671
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

18
 楼主| 发表于 2010-8-26 12:20:10 | 只看该作者
不懂呃,说点中文吧

点评

红色部分的数字改了不就行了吗?!  发表于 2010-8-26 13:13
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
17
发表于 2010-8-26 12:12:02 | 只看该作者
  def draw_character(character_name, character_index, x, y)
    return if character_name == nil
    bitmap = Cache.character(character_name)
    sign = character_name[/^[\!\$]./]
    if sign != nil and sign.include?('$')
      cw = bitmap.width / 3
      ch = bitmap.height / 4

    else
      cw = bitmap.width / 12
      ch = bitmap.height / 8

    end
    n = character_index
    src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
    self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
  end

……
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
671
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

16
 楼主| 发表于 2010-8-26 11:56:11 | 只看该作者
???
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
15
发表于 2010-8-26 11:55:36 | 只看该作者
def draw_character只有Window_Base里才有吧= =
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
671
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

14
 楼主| 发表于 2010-8-26 11:45:24 | 只看该作者
本帖最后由 冰舞蝶恋 于 2010-8-26 11:48 编辑

回复 小幽的马甲 的帖子

看过,而且不止一个,不知道改哪个= =
每次都出错



这是wangswz给的脚本(改过了)
  1. #==============================================================================
  2. # ■ Window_ShopStatus
  3. #------------------------------------------------------------------------------
  4. #  商店画面、显示物品所持数与角色装备的窗口。
  5. #==============================================================================

  6. class Window_ShopStatus < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     x      : 窗口 X 座标
  10.   #     y      : 窗口 Y 座标
  11.   #--------------------------------------------------------------------------
  12.   def initialize(x, y)
  13.     super(x, y, 240, 304)
  14.     @item = nil
  15.     refresh
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 刷新
  19.   #--------------------------------------------------------------------------
  20.   def refresh
  21.     self.contents.clear
  22.     if @item != nil
  23.       number = $game_party.item_number(@item)
  24.       self.contents.font.color = system_color
  25.       self.contents.draw_text(4, 0, 200, WLH, Vocab::Possession)
  26.       self.contents.font.color = normal_color
  27.       self.contents.draw_text(4, 0, 200, WLH, number, 2)
  28.       for actor in $game_party.members
  29.         x = 4
  30.         y = WLH * (2 + actor.index * 2)
  31.         draw_actor_parameter_change(actor, x, y)
  32.       end
  33.     end
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 绘制角色当前装备和能力值
  37.   #     actor : 角色
  38.   #     x     : 绘制点 X 座标
  39.   #     y     : 绘制点 Y 座标
  40.   #--------------------------------------------------------------------------
  41.   def draw_actor_parameter_change(actor, x, y)
  42.     return if @item.is_a?(RPG::Item)
  43.     enabled = actor.equippable?(@item)
  44.     self.contents.font.color = normal_color
  45.     self.contents.draw_text(24, 24, 48, WLH, "攻",1)
  46.     self.contents.draw_text(72, 24, 48, WLH, "防",1)
  47.     self.contents.draw_text(120, 24, 48, WLH, "法",1)
  48.     self.contents.draw_text(168, 24, 48, WLH, "敏",1)
  49. #~     self.contents.font.color.alpha = enabled ? 255 : 128
  50. #~     self.contents.draw_text(x, y, 200, WLH, actor.name)

  51.     self.draw_actor_graphic(actor, x+10, y+24)
  52.     if @item.is_a?(RPG::Weapon)
  53.       item1 = weaker_weapon(actor)
  54.     elsif actor.two_swords_style and @item.kind == 0
  55.       item1 = nil
  56.     else
  57.       item1 = actor.equips[1 + @item.kind]
  58.     end
  59.     if enabled
  60.       atk1 = item1 == nil ? 0 : item1.atk
  61.       atk2 = @item == nil ? 0 : @item.atk
  62.       change = atk2 - atk1
  63.       self.contents.font.color = change>=0 ? power_up_color : power_down_color
  64.       change = -change if change<=0
  65.       self.contents.draw_text(13, y, 48, WLH, sprintf("%d", change), 2)
  66.       def1 = item1 == nil ? 0 : item1.def
  67.       def2 = @item == nil ? 0 : @item.def
  68.       change = def2 - def1
  69.       self.contents.font.color = change>=0 ? power_up_color : power_down_color
  70.       change = -change if change<=0
  71.       self.contents.draw_text(61, y, 48, WLH, sprintf("%d", change), 2)
  72.       spi1 = item1 == nil ? 0 : item1.spi
  73.       spi2 = @item == nil ? 0 : @item.spi
  74.       change = spi2 - spi1
  75.       self.contents.font.color = change>=0 ? power_up_color : power_down_color
  76.       change = -change if change<=0
  77.       self.contents.draw_text(109, y, 48, WLH, sprintf("%d", change), 2)
  78.       agi1 = item1 == nil ? 0 : item1.agi
  79.       agi2 = @item == nil ? 0 : @item.agi
  80.       change = agi2 - agi1
  81.       self.contents.font.color = change>=0 ? power_up_color : power_down_color
  82.       change = -change if change<=0
  83.       self.contents.draw_text(157, y, 48, WLH, sprintf("%d", change), 2)
  84.       if @item.is_a?(RPG::Weapon)
  85. #~         atk1 = item1 == nil ? 0 : item1.atk
  86. #~         atk2 = @item == nil ? 0 : @item.atk
  87. #~         change = atk2 - atk1
  88.       else
  89.         eva1 = item1 == nil ? 0 : item1.eva
  90.         eva2 = @item == nil ? 0 : @item.eva
  91.         change = eva2 - eva1
  92.         self.contents.font.color = change>=0 ? power_up_color : power_down_color
  93.       end
  94. #~       self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
  95.     end
  96.     draw_item_name(item1, x, y + WLH, enabled)
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 获取双刀派角色所装备的武器中较弱的武器
  100.   #     actor : 角色
  101.   #--------------------------------------------------------------------------
  102.   def weaker_weapon(actor)
  103.     if actor.two_swords_style
  104.       weapon1 = actor.weapons[0]
  105.       weapon2 = actor.weapons[1]
  106.       if weapon1 == nil or weapon2 == nil
  107.         return nil
  108.       elsif weapon1.atk < weapon2.atk
  109.         return weapon1
  110.       else
  111.         return weapon2
  112.       end
  113.     else
  114.       return actor.weapons[0]
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 设置物品
  119.   #     item : 新物品
  120.   #--------------------------------------------------------------------------
  121.   def item=(item)
  122.     if @item != item
  123.       @item = item
  124.       refresh
  125.     end
  126.   end
  127. end
复制代码
这是新截图存档的脚本,也改过一些坐标了
  1. #==============================================================================
  2. # vx新截图存档 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # ☆ 核心部分是内存位图的输入输出
  5. # (快速存储Bitmap的Marshal 作者: 柳之一) 强大啊
  6. #------------------------------------------------------------------------------
  7. # ▼ 相比rmxp正版截图存档(作者: 柳柳),主要变动如下:
  8. # ① 省去了 screenshot.dll 文件 (因快速存储Bitmap的Marshal的存在)
  9. # ② 无须人工新建存档文件夹,脚本将自建
  10. # ③ 方便地更改最大存档数,只需设置最大值
  11. #==============================================================================
  12. MAX_SAVE_ID = 99 # 最大存档数
  13. SAVE_DIR = "Saves/" # 改变的存档目录(不希望改变目录请删)
  14. #==============================================================================
  15. # (快速存储Bitmap的Marshal 作者: 柳之一) 强大啊
  16. #==============================================================================
  17. class Font
  18. def marshal_dump
  19. end
  20. def marshal_load(obj)
  21. end
  22. end

  23. class Bitmap
  24. # 传送到内存的API函数
  25. RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  26. RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
  27. def _dump(limit)
  28. data = "rgba" * width * height
  29. RtlMoveMemory_pi.call(data, address, data.length)
  30. [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # 压缩
  31. end
  32. def self._load(str)
  33. w, h, zdata = str.unpack("LLa*")
  34. b = self.new(w, h)
  35. RtlMoveMemory_ip.call(b.address, Zlib::Inflate.inflate(zdata), w * h * 4)
  36. return b
  37. end
  38. # [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
  39. def address
  40. buffer, ad = "rgba", object_id * 2 + 16
  41. RtlMoveMemory_pi.call(buffer, ad, 4)
  42. ad = buffer.unpack("L")[0] + 8
  43. RtlMoveMemory_pi.call(buffer, ad, 4)
  44. ad = buffer.unpack("L")[0] + 16
  45. RtlMoveMemory_pi.call(buffer, ad, 4)
  46. return buffer.unpack("L")[0]
  47. end
  48. end

  49. #==============================================================================
  50. # ■ Game_Temp
  51. #==============================================================================
  52. class Game_Temp
  53. #--------------------------------------------------------------------------
  54. # ● 定义实例变量
  55. #--------------------------------------------------------------------------
  56. attr_accessor :save_bitmap # 存档位图
  57. #--------------------------------------------------------------------------
  58. # ● 初始化对象
  59. #--------------------------------------------------------------------------
  60. alias ini initialize
  61. def initialize
  62. ini
  63. @save_bitmap = Bitmap.new(1, 1)
  64. end
  65. end

  66. #==============================================================================
  67. # ■ Window_SaveFile
  68. #==============================================================================
  69. class Window_SaveFile < Window_Base
  70. #--------------------------------------------------------------------------
  71. # ● 定义实例变量
  72. #--------------------------------------------------------------------------
  73. attr_reader :filename # 文件名
  74. attr_reader :file_exist # 文件存在标志
  75. #--------------------------------------------------------------------------
  76. # ● 初始化对象
  77. # file_index : 存档文件索引 (0~3)
  78. # filename : 文件名
  79. #--------------------------------------------------------------------------
  80. def initialize(file_index, filename)
  81. super(160, 56, 384, 360)
  82. @file_index = file_index
  83. @filename = filename
  84. make_dir(SAVE_DIR) if SAVE_DIR != nil
  85. load_gamedata
  86. refresh(@file_index)
  87. end
  88. #--------------------------------------------------------------------------
  89. # ● 读取部分游戏数据
  90. #--------------------------------------------------------------------------
  91. def load_gamedata
  92. @file_exist = FileTest.exist?(SAVE_DIR + @filename)
  93. if @file_exist
  94. file = File.open(SAVE_DIR + @filename, "r")
  95. begin
  96. @characters = Marshal.load(file)
  97. @frame_count = Marshal.load(file)
  98. @last_bgm = Marshal.load(file)
  99. @last_bgs = Marshal.load(file)
  100. @game_system = Marshal.load(file)
  101. @game_message = Marshal.load(file)
  102. @game_switches = Marshal.load(file)
  103. @game_variables = Marshal.load(file)
  104. @game_self_switches = Marshal.load(file)
  105. @game_actors = Marshal.load(file)
  106. @game_party = Marshal.load(file)
  107. @game_troop = Marshal.load(file)
  108. @game_map = Marshal.load(file)
  109. @game_player = Marshal.load(file)
  110. # 读取截图
  111. @file_bitmap = Marshal.load(file)
  112. @total_sec = @frame_count / Graphics.frame_rate
  113. rescue
  114. @file_exist = false
  115. ensure
  116. file.close
  117. end
  118. end
  119. end
  120. #--------------------------------------------------------------------------
  121. # ◎ 刷新
  122. # index : 索引
  123. #--------------------------------------------------------------------------
  124. def refresh(index)
  125. file_index = index
  126. self.contents.clear
  127. self.contents.font.color = normal_color
  128. if @file_exist
  129. # 描绘底部阴影
  130. self.contents.fill_rect(12+3, 4+3, 326,249, Color.new(0,0,64))
  131. # 描绘截图
  132. draw_snap_bitmap(12, 4)
  133. draw_party_characters(152, 296)
  134. draw_gold(-245, 305)
  135. draw_playtime(0, 296+8, contents.width - 40, 2)
  136. else
  137. self.contents.draw_text(0, 288-56, contents.width-4,WLH, "- 空的记忆 -", 1)
  138. end
  139. end

  140. #--------------------------------------------------------------------------
  141. # ◎ 更改索引
  142. # index : 索引
  143. #--------------------------------------------------------------------------
  144. def file_index=(file_index)
  145. @file_index = file_index
  146. end
  147. #--------------------------------------------------------------------------
  148. # ◎ 描绘游戏人物
  149. # x : 描画先 X 座標
  150. # y : 描画先 Y 座標
  151. #--------------------------------------------------------------------------
  152. def draw_party_characters(x, y)
  153. for i in [email][email protected][/email]
  154. name = @characters[i][0]
  155. index = @characters[i][1]
  156. actor_id = @game_party.members[i].id
  157. level = @game_actors[actor_id].level
  158. draw_character(name, index, x + i * 48, y)
  159. self.contents.font.size = 14
  160. self.contents.draw_text(x + i * 48, y-16, WLH-8, WLH, level.to_s, 2)
  161. self.contents.font.size = Font.default_size
  162. end
  163. end
  164. #--------------------------------------------------------------------------
  165. # ◎ 生成保存路径
  166. # path : 路径
  167. #--------------------------------------------------------------------------
  168. def make_dir(path)
  169. dir = path.split("/")
  170. for i in 0...dir.size
  171. unless dir == "."
  172. add_dir = dir[0..i].join("/")
  173. begin
  174. Dir.mkdir(add_dir)
  175. rescue
  176. end
  177. end
  178. end
  179. end
  180. #--------------------------------------------------------------------------
  181. # ◎ 生成文件名
  182. # file_index : 存档文件索引 (0~3)
  183. #--------------------------------------------------------------------------
  184. def make_filename(file_index)
  185. return "Save#{file_index + 1}.rvdata"
  186. end
  187. #--------------------------------------------------------------------------
  188. # ◎ 描绘截图
  189. # x : 描画先 X 座標
  190. # y : 描画先 Y 座標
  191. #--------------------------------------------------------------------------
  192. def draw_snap_bitmap(x, y)
  193. bitmap = @file_bitmap
  194. if bitmap == nil
  195. self.contents.draw_text(0, 112, 384-32, 24, "找不到截图文件!", 1)
  196. else
  197. self.contents.blur
  198. rect = Rect.new(0, 0, 0, 0)
  199. rect.width = bitmap.width
  200. rect.height = bitmap.height
  201. self.contents.blt(x, y, bitmap, rect)
  202. end
  203. end
  204. #--------------------------------------------------------------------------
  205. # ◎ 描绘金钱
  206. # x : 描画先 X 座標
  207. # y : 描画先 Y 座標
  208. #--------------------------------------------------------------------------
  209. def draw_gold(x, y)
  210. self.contents.font.size = 16
  211. cx = contents.text_size(Vocab::gold).width
  212. self.contents.font.color = normal_color
  213. value = @game_party.gold
  214. width = self.contents.width
  215. self.contents.draw_text(x, y, width-cx-2, WLH, value, 2)
  216. self.contents.font.color = system_color
  217. self.contents.draw_text(x, y, width, WLH, Vocab::gold, 2)
  218. self.contents.font.size = Font.default_size
  219. end
  220. #--------------------------------------------------------------------------
  221. # ● 描绘游戏时间
  222. # x : 描绘目标 X 坐标
  223. # y : 描绘目标 Y 坐标
  224. # width : 宽
  225. # align : 配置
  226. #--------------------------------------------------------------------------
  227. def draw_playtime(x, y, width, align)
  228. hour = @total_sec / 60 / 60
  229. min = @total_sec / 60 % 60
  230. sec = @total_sec % 60
  231. time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  232. self.contents.font.color = normal_color
  233. self.contents.draw_text(x, y, width, WLH, time_string, 2)
  234. end
  235. end

  236. #==============================================================================
  237. # ■ Scene_Base
  238. #==============================================================================
  239. class Scene_Base
  240. #--------------------------------------------------------------------------
  241. # ◎ 生成存档位图快照
  242. #--------------------------------------------------------------------------
  243. def snapshot_for_save
  244. d_rect = Rect.new(0, 0, 326, 249)
  245. s_rect = Rect.new(0, 0, 544, 416)
  246. save_bitmap = Graphics.snap_to_bitmap
  247. $game_temp.save_bitmap.dispose
  248. $game_temp.save_bitmap = Bitmap.new(326, 249)
  249. $game_temp.save_bitmap.stretch_blt(d_rect, save_bitmap, s_rect)
  250. end
  251. end

  252. #==============================================================================
  253. # ■ Scene_Map
  254. #==============================================================================
  255. class Scene_Map < Scene_Base
  256. #--------------------------------------------------------------------------
  257. # ● 结束处理
  258. #--------------------------------------------------------------------------
  259. alias save_terminate terminate
  260. def terminate
  261. snapshot_for_save
  262. save_terminate
  263. end
  264. end

  265. #==============================================================================
  266. # ■ Scene_Title
  267. #==============================================================================
  268. class Scene_Title < Scene_Base
  269. #--------------------------------------------------------------------------
  270. # ● 判断继续是否有效
  271. #--------------------------------------------------------------------------
  272. def check_continue
  273. @continue_enabled = (Dir.glob(SAVE_DIR + 'Save*.rvdata').size > 0)
  274. end
  275. end

  276. #==============================================================================
  277. # ■ Scene_File
  278. #------------------------------------------------------------------------------
  279. #  处理文件的类。
  280. #==============================================================================
  281. class Scene_File < Scene_Base
  282. #--------------------------------------------------------------------------
  283. # ● 初始化对象
  284. # saving : 存档标志 (false 为载入画面)
  285. # from_title : 调用标题画面的 "继续" 标志
  286. # from_event : 事件的 "调用存档画面" 的调用标志
  287. #--------------------------------------------------------------------------
  288. def initialize(saving, from_title, from_event)
  289. @saving = saving
  290. @from_title = from_title
  291. @from_event = from_event
  292. end
  293. #--------------------------------------------------------------------------
  294. # ● 开始处理
  295. #--------------------------------------------------------------------------
  296. def start
  297. super
  298. create_menu_background
  299. @help_window = Window_Help.new
  300. create_command_window
  301. if @saving
  302. @index = $game_temp.last_file_index
  303. @help_window.set_text(Vocab::SaveMessage)
  304. else
  305. @index = self.latest_file_index
  306. @help_window.set_text(Vocab::LoadMessage)
  307. end
  308. @refresh_index = @command_window.index = @index
  309. @item_max = MAX_SAVE_ID
  310. create_savefile_window
  311. end
  312. #--------------------------------------------------------------------------
  313. # ● 结束处理
  314. #--------------------------------------------------------------------------
  315. def terminate
  316. super
  317. dispose_menu_background
  318. @help_window.dispose
  319. dispose_item_windows
  320. end
  321. #--------------------------------------------------------------------------
  322. # ● 还原至原先的画面
  323. #--------------------------------------------------------------------------
  324. def return_scene
  325. if @from_title
  326. $scene = Scene_Title.new
  327. elsif @from_event
  328. $scene = Scene_Map.new
  329. else
  330. $scene = Scene_Menu.new(4)
  331. end
  332. end
  333. #--------------------------------------------------------------------------
  334. # ● 更新画面
  335. #--------------------------------------------------------------------------
  336. def update
  337. super
  338. update_menu_background
  339. @help_window.update
  340. update_savefile_windows
  341. update_savefile_selection
  342. end
  343. #--------------------------------------------------------------------------
  344. # ◎ 生成存档文件列表窗口
  345. #--------------------------------------------------------------------------
  346. def create_command_window
  347. file_names = []
  348. digit = MAX_SAVE_ID.to_s.size
  349. str_f = ""
  350. digit.times{|n| str_f += "0"}
  351. str_f[str_f.size-1, 1] = digit.to_s
  352. for i in 0...MAX_SAVE_ID
  353. id = sprintf("%#{str_f}d", i+1)
  354. file_names.push(Vocab::File + "\s" + id)
  355. end
  356. @command_window = Window_Command.new(160, file_names)
  357. @command_window.height = 360
  358. @command_window.y = 56
  359. end
  360. #--------------------------------------------------------------------------
  361. # ● 生成存档文件窗口
  362. #--------------------------------------------------------------------------
  363. def create_savefile_window
  364. @savefile_window = Window_SaveFile.new(@command_window.index, make_filename(@command_window.index))
  365. end
  366. #--------------------------------------------------------------------------
  367. # ● 释放存档文件
  368. #--------------------------------------------------------------------------
  369. def dispose_item_windows
  370. @command_window.dispose
  371. @savefile_window.dispose
  372. end
  373. #--------------------------------------------------------------------------
  374. # ● 更新存档文件窗口
  375. #--------------------------------------------------------------------------
  376. def update_savefile_windows
  377. @command_window.update
  378. @savefile_window.update
  379. end
  380. #--------------------------------------------------------------------------
  381. # ● 更新存档文件选择
  382. #--------------------------------------------------------------------------
  383. def update_savefile_selection
  384. if Input.trigger?(Input::C)
  385. determine_savefile
  386. end
  387. if Input.trigger?(Input::B)
  388. Sound.play_cancel
  389. return_scene
  390. end
  391. if @refresh_index != @command_window.index
  392. @refresh_index = @command_window.index
  393. @savefile_window.dispose
  394. create_savefile_window
  395. end
  396. end
  397. #--------------------------------------------------------------------------
  398. # ● 确定存档文件
  399. #--------------------------------------------------------------------------
  400. def determine_savefile
  401. if @saving
  402. Sound.play_save
  403. do_save
  404. else
  405. if @savefile_window.file_exist
  406. Sound.play_load
  407. do_load
  408. else
  409. Sound.play_buzzer
  410. return
  411. end
  412. end
  413. $game_temp.last_file_index = @index
  414. end
  415. #--------------------------------------------------------------------------
  416. # ◎ 生成文件名
  417. # file_index : 存档文件索引
  418. #--------------------------------------------------------------------------
  419. def make_filename(file_index)
  420. return "Save#{file_index + 1}.rvdata"
  421. end
  422. #--------------------------------------------------------------------------
  423. # ● 按时间戳选择最新的文件
  424. #--------------------------------------------------------------------------
  425. def latest_file_index
  426. index = 0
  427. latest_time = Time.at(0) # 时间戳
  428. for i in 0...MAX_SAVE_ID
  429. file_name = make_filename(i)
  430. if FileTest.exist?(SAVE_DIR + file_name)
  431. file = File.open(SAVE_DIR + file_name, "r")
  432. if file.mtime > latest_time
  433. latest_time = file.mtime
  434. index = i
  435. end
  436. end
  437. end
  438. return index
  439. end
  440. #--------------------------------------------------------------------------
  441. # ● 执行存档
  442. #--------------------------------------------------------------------------
  443. def do_save
  444. file_name = make_filename(@command_window.index)
  445. file = File.open(SAVE_DIR + file_name, "wb")
  446. write_save_data(file)
  447. # 保存位图
  448. $file_bitmap = $game_temp.save_bitmap
  449. Marshal.dump($file_bitmap, file)
  450. file.close
  451. return_scene
  452. end
  453. #--------------------------------------------------------------------------
  454. # ● 执行载入
  455. #--------------------------------------------------------------------------
  456. def do_load
  457. file_name = make_filename(@command_window.index)
  458. file = File.open(SAVE_DIR + file_name, "rb")
  459. read_save_data(file)
  460. file.close
  461. $scene = Scene_Map.new
  462. RPG::BGM.fade(1500)
  463. Graphics.fadeout(60)
  464. Graphics.wait(40)
  465. @last_bgm.play
  466. @last_bgs.play
  467. end
  468. end
复制代码
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
13
发表于 2010-8-26 11:42:42 | 只看该作者
……你确定你看过draw_character的代码吗?
From mortal hope immortal power springs.
回复 支持 反对

使用道具 举报

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
671
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

12
 楼主| 发表于 2010-8-26 11:40:20 | 只看该作者
回复 越前リョーマ 的帖子

不太懂,能具体一下吗……谢谢。
   
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-5 20:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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