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

Project1

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

[已经解决] 我的游戏存档和读档都会出错,求解决

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
153 小时
注册时间
2010-12-18
帖子
167
跳转到指定楼层
1
发表于 2013-6-18 20:44:47 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 mo88 于 2013-6-18 20:49 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_File
  3. #------------------------------------------------------------------------------
  4. #  存档画面及读档画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_File < Scene_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #     saving     : 存档标志(false则为读档)
  11.   #     from_title : 标志:是由标题画面的「继续游戏」调用的
  12.   #     from_event : 标志:是由事件「呼叫存档画面」命令调用的
  13.   #--------------------------------------------------------------------------
  14.   def initialize(saving, from_title, from_event)
  15.     @saving = saving
  16.     @from_title = from_title
  17.     @from_event = from_event
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 开始处理
  21.   #--------------------------------------------------------------------------
  22.   def start
  23.     super
  24.     create_menu_background
  25.     @help_window = Window_Help.new
  26.     create_savefile_windows
  27.     if @saving
  28.       @index = $game_temp.last_file_index
  29.       @help_window.set_text(Vocab::SaveMessage)
  30.     else
  31.       @index = self.latest_file_index
  32.       @help_window.set_text(Vocab::LoadMessage)
  33.     end
  34.     @savefile_windows[@index].selected = true
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 结束处理
  38.   #--------------------------------------------------------------------------
  39.   def terminate
  40.     super
  41.     dispose_menu_background
  42.     @help_window.dispose
  43.     dispose_item_windows
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 回到原画面
  47.   #--------------------------------------------------------------------------
  48.   def return_scene
  49.     if @from_title
  50.       $scene = Scene_Title.new
  51.     elsif @from_event
  52.       $scene = Scene_Map.new
  53.     else
  54.       $scene = Scene_Menu.new(4)
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 更新画面
  59.   #--------------------------------------------------------------------------
  60.   def update
  61.     super
  62.     update_menu_background
  63.     @help_window.update
  64.     update_savefile_windows
  65.     update_savefile_selection
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 生成存档窗口
  69.   #--------------------------------------------------------------------------
  70.   def create_savefile_windows
  71.     @savefile_windows = []
  72.     for i in 0..3
  73.       @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  74.     end
  75.     @item_max = 4
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 释放存档窗口
  79.   #--------------------------------------------------------------------------
  80.   def dispose_item_windows
  81.     for window in @savefile_windows
  82.       window.dispose
  83.     end
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 更新存档窗口
  87.   #--------------------------------------------------------------------------
  88.   def update_savefile_windows
  89.     for window in @savefile_windows
  90.       window.update
  91.     end
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 更新存档文件选择
  95.   #--------------------------------------------------------------------------
  96.   def update_savefile_selection
  97.     if Input.trigger?(Input::C)
  98.       determine_savefile
  99.     elsif Input.trigger?(Input::B)
  100.       Sound.play_cancel
  101.       return_scene
  102.     else
  103.       last_index = @index
  104.       if Input.repeat?(Input::DOWN)
  105.         cursor_down(Input.trigger?(Input::DOWN))
  106.       end
  107.       if Input.repeat?(Input::UP)
  108.         cursor_up(Input.trigger?(Input::UP))
  109.       end
  110.       if @index != last_index
  111.         Sound.play_cursor
  112.         @savefile_windows[last_index].selected = false
  113.         @savefile_windows[@index].selected = true
  114.       end
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 确认存档文件
  119.   #--------------------------------------------------------------------------
  120.   def determine_savefile
  121.     if @saving
  122.       Sound.play_save
  123.       do_save
  124.     else
  125.       if @savefile_windows[@index].file_exist
  126.         Sound.play_load
  127.         do_load
  128.       else
  129.         Sound.play_buzzer
  130.         return
  131.       end
  132.     end
  133.     $game_temp.last_file_index = @index
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 光标下移
  137.   #     wrap : 允许循环
  138.   #--------------------------------------------------------------------------
  139.   def cursor_down(wrap)
  140.     if @index < @item_max - 1 or wrap
  141.       @index = (@index + 1) % @item_max
  142.     end
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 光标上移
  146.   #     wrap : 允许循环
  147.   #--------------------------------------------------------------------------
  148.   def cursor_up(wrap)
  149.     if @index > 0 or wrap
  150.       @index = (@index - 1 + @item_max) % @item_max
  151.     end
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● 生成文件名称
  155.   #     file_index : 存档位置(0~3)
  156.   #--------------------------------------------------------------------------
  157.   def make_filename(file_index)
  158.     return "Save#{file_index + 1}.rvdata"
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 选择最近存档的文件
  162.   #--------------------------------------------------------------------------
  163.   def latest_file_index
  164.     index = 0
  165.     latest_time = Time.at(0)
  166.     for i in [email]0...@savefile_windows.size[/email]
  167.       if @savefile_windows[i].time_stamp > latest_time
  168.         latest_time = @savefile_windows[i].time_stamp
  169.         index = i
  170.       end
  171.     end
  172.     return index
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 执行存档
  176.   #--------------------------------------------------------------------------
  177.   def do_save
  178.     file = File.open(@savefile_windows[@index].filename, "wb")
  179.     write_save_data(file)
  180.     file.close
  181.     return_scene
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 执行读档
  185.   #--------------------------------------------------------------------------
  186.   def do_load
  187.     file = File.open(@savefile_windows[@index].filename, "rb")
  188.     read_save_data(file)
  189.     file.close
  190.     $scene = Scene_Map.new
  191.     RPG::BGM.fade(1500)
  192.     Graphics.fadeout(60)
  193.     Graphics.wait(40)
  194.     @last_bgm.play
  195.     @last_bgs.play
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● 写入存档数据
  199.   #     file : 写入存档对象(已开启)
  200.   #--------------------------------------------------------------------------
  201.   def write_save_data(file)
  202.     characters = []
  203.     for actor in $game_party.members
  204.       characters.push([actor.character_name, actor.character_index])
  205.     end
  206.     $game_system.save_count += 1
  207.     $game_system.version_id = $data_system.version_id
  208.     @last_bgm = RPG::BGM::last
  209.     @last_bgs = RPG::BGS::last
  210.     Marshal.dump(characters,           file)
  211.     Marshal.dump(Graphics.frame_count, file)
  212.     Marshal.dump(@last_bgm,            file)
  213.     Marshal.dump(@last_bgs,            file)
  214.     Marshal.dump($game_system,         file)
  215.     Marshal.dump($game_message,        file)
  216.     Marshal.dump($game_switches,       file)
  217.     Marshal.dump($game_variables,      file)
  218.     Marshal.dump($game_self_switches,  file)
  219.     Marshal.dump($game_actors,         file)
  220.     Marshal.dump($game_party,          file)
  221.     Marshal.dump($game_troop,          file)
  222.     Marshal.dump($game_map,            file)
  223.     Marshal.dump($game_player,         file)
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 读出存档数据
  227.   #     file : 读出存档对象(已开启)
  228.   #--------------------------------------------------------------------------
  229.   def read_save_data(file)
  230.     characters           = Marshal.load(file)
  231.     Graphics.frame_count = Marshal.load(file)
  232.     @last_bgm            = Marshal.load(file)
  233.     @last_bgs            = Marshal.load(file)
  234.     $game_system         = Marshal.load(file)
  235.     $game_message        = Marshal.load(file)
  236.     $game_switches       = Marshal.load(file)
  237.     $game_variables      = Marshal.load(file)
  238.     $game_self_switches  = Marshal.load(file)
  239.     $game_actors         = Marshal.load(file)
  240.     $game_party          = Marshal.load(file)
  241.     $game_troop          = Marshal.load(file)
  242.     $game_map            = Marshal.load(file)
  243.     $game_player         = Marshal.load(file)
  244.     if $game_system.version_id != $data_system.version_id
  245.       $game_map.setup($game_map.map_id)
  246.       $game_player.center($game_player.x, $game_player.y)
  247.     end
  248.   end
  249. end


@Password

01.jpg (12.67 KB, 下载次数: 19)

读档出错

读档出错

02.jpg (12.98 KB, 下载次数: 18)

存档出错

存档出错
第一个游戏《神马传说》完成度:
策划:★★★★★★★★★★ 100%
素材:★★★★★★★★★★ 100%
脚本:★★★★★★★★★★ 100%
数据库:★★★★★★★★★★ 100%
剧情:★★★★★★★★★★ 100%
BUG修复:★★★★★★★★★★ 100%

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4679
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

来自 9楼
发表于 2013-6-20 10:18:30 | 只看该作者
Scripts.rar (233.69 KB, 下载次数: 55)
同样的问题,把路牌指示所有的@roadsign_sprite改成$roadsign_sprite

评分

参与人数 1星屑 +160 收起 理由
Password + 160 LZ的脚本太多了

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
153 小时
注册时间
2010-12-18
帖子
167
8
 楼主| 发表于 2013-6-20 09:39:04 | 只看该作者
@protosssonny
在第8张地图存档的话就出错,然后无法读取了
第一个游戏《神马传说》完成度:
策划:★★★★★★★★★★ 100%
素材:★★★★★★★★★★ 100%
脚本:★★★★★★★★★★ 100%
数据库:★★★★★★★★★★ 100%
剧情:★★★★★★★★★★ 100%
BUG修复:★★★★★★★★★★ 100%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
153 小时
注册时间
2010-12-18
帖子
167
7
 楼主| 发表于 2013-6-19 20:27:22 | 只看该作者
protosssonny 发表于 2013-6-19 10:55
改好了,把本脚本替换《得失提示》即可。错误发生在146行。@实例变量=Sprite.new这样的语句最好不要乱加, ...

@protosssonny
还会出错。。。
估计还会有其它隐藏着还没发现的问题 = =

QQ图片20130619201857.jpg (11.47 KB, 下载次数: 19)

QQ图片20130619201857.jpg

点评

必须说明在什么情况下导致的出错!  发表于 2013-6-19 22:59
第一个游戏《神马传说》完成度:
策划:★★★★★★★★★★ 100%
素材:★★★★★★★★★★ 100%
脚本:★★★★★★★★★★ 100%
数据库:★★★★★★★★★★ 100%
剧情:★★★★★★★★★★ 100%
BUG修复:★★★★★★★★★★ 100%
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4679
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

6
发表于 2013-6-19 10:55:51 | 只看该作者
改好了,把本脚本替换《得失提示》即可。错误发生在146行。@实例变量=Sprite.new这样的语句最好不要乱加,否则会造成存档不能。这种显示完窗口后就dispose掉的Sprite,完全没有必要用@实例变量,用局部变量就可以了。还有,问题解决了不要自己编辑成已经解决,而是把你认可的楼层置顶,等待版主来加分。因为你编辑后版主会误认为已经分类,导致漏发奖励给帮助过你的人。然后@Luciffer ,我自告奋勇了。
  1. #==============================================================================
  2. # 本腳本來自www.66RPG.com,使用和轉載請保留此信息
  3. #==============================================================================

  4. # 注意!!!在對話後得到物品,請在對話後先用事件等待3幀,否則對話框來不及消失。
  5. # 略作修改
  6. # BY:莉德露 (6R ID)
  7. # 加入圖片顯示效果,取消窗口顯示。
  8. # 開關定義:

  9. $noshowgold = 51                        # 不显示金钱得失
  10. $noshowitem = 52                        # 不显示物品得失
  11. $noshowweapon = 53                      # 不显示武器得失
  12. $noshowarmor = 54                       # 不显示防具得失
  13. # 以上開關,當打開的時候,获得物品將不會提示,比如默認打開41號開關,获得金钱不再提示

  14. # 不想提示等级升降时,就在事件命令直接选择是否显示就行了。

  15. #——聲效,可以自己改
  16. folder = "Audio/SE/"
  17. $gain_gold_se   = folder +"Shop"      # 获得金钱声效
  18. $loss_gold_se   = folder +"Blow2"     # 失去金钱声效

  19. $gain_item_se   = folder +"Item1"     # 获得物品声效
  20. $loss_item_se   = folder +"Blow2"     # 失去物品声效

  21. $gain_weapon_se = folder +"Item1"     # 获得武器声效
  22. $loss_weapon_se = folder +"Blow2"     # 失去武器声效

  23. $gain_armor_se  = folder +"Item1"     # 获得防具声效
  24. $loss_armor_se  = folder +"Blow2"     # 失去防具声效

  25. $gain_lv_se     = folder +"Item1"     # 提升等级声效
  26. $loss_lv_se     = folder +"Blow2"     # 降低等级声效

  27. # ————————————————————————————————————

  28. class Game_Interpreter
  29.   #--------------------------------------------------------------------------
  30.   # ● 增減金钱
  31.   #--------------------------------------------------------------------------
  32.   def command_125
  33.     value = operate_value(@params[0], @params[1], @params[2])
  34.     $game_party.gain_gold(value)
  35.     if $game_switches[$noshowgold]==false
  36.       show_gain_window(0, value)
  37.     end
  38.     return true
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 增減物品
  42.   #--------------------------------------------------------------------------
  43.   def command_126
  44.     value = operate_value(@params[1], @params[2], @params[3])
  45.     $game_party.gain_item($data_items[@params[0]], value)
  46.     if $game_switches[$noshowitem]==false
  47.       show_gain_window(1, value)
  48.     end
  49.     $game_map.need_refresh = true
  50.     return true
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 增減武器
  54.   #--------------------------------------------------------------------------
  55.   def command_127
  56.     value = operate_value(@params[1], @params[2], @params[3])
  57.     $game_party.gain_item($data_weapons[@params[0]], value, @params[4])
  58.     if $game_switches[$noshowweapon]==false
  59.       show_gain_window(2, value)
  60.     end
  61.     return true
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 增減防具
  65.   #--------------------------------------------------------------------------
  66.   def command_128
  67.     value = operate_value(@params[1], @params[2], @params[3])
  68.     $game_party.gain_item($data_armors[@params[0]], value, @params[4])
  69.     if $game_switches[$noshowarmor]==false
  70.       show_gain_window(3, value)
  71.     end
  72.     return true
  73.   end
  74.   
  75.   #--------------------------------------------------------------------------
  76.   # ● 等级増減
  77.   #--------------------------------------------------------------------------
  78.   def command_316
  79.     value = operate_value(@params[1], @params[2], @params[3])
  80.     iterate_actor_id(@params[0]) do |actor|
  81.       actor.change_level(actor.level + value, false)
  82.       if @params[4]
  83.         show_gain_level_window(actor,value)
  84.       end
  85.     end
  86.     return true
  87.   end

  88.   
  89.   def show_gain_window(type, value)
  90.     snstar2006_66rpg_item = $data_armors[@params[0]]
  91.     snstar2006_66rpg = Window_Base.new((640-360)/2,158,200,100)
  92.     snstar2006_66rpg.contents = Bitmap.new(snstar2006_66rpg.width - 32, snstar2006_66rpg.height - 32)
  93.     if value >= 0
  94.       gain_text = "获得"   
  95.     else
  96.       gain_text = "失去"
  97.     end
  98.    
  99.     case type
  100.     when 0
  101.       gain_type = "金钱"
  102.       if value >=0
  103.         Audio.se_play($gain_gold_se,80,100)
  104.       else
  105.         Audio.se_play("Audio/SE/"+"Item1",80,100)
  106.       end
  107.     when 1
  108.       gain_type = "物品"
  109.       string = $data_items[@params[0]]
  110.       if value >=0
  111.         Audio.se_play($gain_item_se,80,100)
  112.       else
  113.         Audio.se_play($loss_item_se,80,100)
  114.       end
  115.     when 2
  116.       gain_type = "武器"
  117.       string = $data_weapons[@params[0]]
  118.       if value >=0
  119.         Audio.se_play($gain_weapon_se,80,100)
  120.       else
  121.         Audio.se_play($loss_weapon_se,80,100)
  122.       end
  123.     when 3
  124.       gain_type = "装备"
  125.       string = $data_armors[@params[0]]
  126.       if value >=0
  127.         Audio.se_play($gain_armor_se,80,100)
  128.       else
  129.         Audio.se_play($loss_armor_se,80,100)
  130.       end
  131.     end
  132.    
  133.     snstar2006_66rpg.contents.draw_text(0,0,160,32,gain_text+gain_type+":")
  134.     unless type == 0
  135.       sprite = Sprite.new
  136.       #导入在system里的图片
  137.       sprite.bitmap = Cache.system("GET_ITEM")
  138.       snstar2006_66rpg.draw_item_name(string, 28, 32, true)
  139.       snstar2006_66rpg.contents.draw_text(18, 28, 150, 32, "×"+value.abs.to_s, 2)
  140.     else
  141.       sprite = Sprite.new
  142.       #导入在system里的图片
  143.       sprite.bitmap = Cache.system("GET_ITEM")
  144.       snstar2006_66rpg.contents.draw_text(32,28,240,32,value.abs.to_s + "  "+ Vocab::gold)
  145.     end
  146.     snstar2006_66rpg.opacity = 0
  147.    
  148.     for i in 0..30
  149.       Graphics.update
  150.     end
  151.    
  152.     for i in 0..10
  153. #      @sprite.bitmap.opacity -= 30
  154. #      @sprite.bitmap.contents_opacity -= 30
  155.       #snstar2006_66rpg.opacity -= 30
  156.       #snstar2006_66rpg.contents_opacity -= 30
  157.       Graphics.update
  158.     end
  159.    
  160.     snstar2006_66rpg.dispose
  161.     sprite.bitmap.dispose
  162.     sprite.dispose
  163.   end

  164.   def show_gain_level_window(actor,value)
  165.     lvstring = Vocab::level
  166.         
  167.     snstar2006_66rpg = Window_Base.new((640-300)/2,128,200,100)
  168.     snstar2006_66rpg.contents = Bitmap.new(snstar2006_66rpg.width - 32, snstar2006_66rpg.height - 32)
  169.    
  170.     if value >= 0
  171.       gain_text = "提升"
  172.       Audio.se_play($gain_lv_se,80,100)
  173.     else
  174.       gain_text = "降低"
  175.       Audio.se_play($loss_lv_se,80,100)
  176.     end
  177.    
  178.    
  179.     snstar2006_66rpg.contents.draw_text(0, 0, 108, 32, actor.name)
  180.     string = lvstring+gain_text+value.abs.to_s+"级"
  181.     snstar2006_66rpg.contents.draw_text(32,32,160,32,string)

  182.     snstar2006_66rpg.opacity = 160
  183.    
  184.     for i in 0..30
  185.       Graphics.update
  186.     end
  187.    
  188.     for i in 0..10
  189.       snstar2006_66rpg.opacity -= 30
  190.       snstar2006_66rpg.contents_opacity -= 30
  191.       Graphics.update
  192.     end
  193.    
  194.     snstar2006_66rpg.dispose

  195.   end
  196. end



  197. #==============================================================================
  198. # 本腳本來自www.66RPG.com,使用和轉載請保留此信息
  199. #==============================================================================
复制代码

点评

= =习惯了问题解决后就设置已经解决,防止那些喜欢灌水的人找机会灌水  发表于 2013-6-19 13:21

评分

参与人数 1梦石 +1 收起 理由
Luciffer + 1 认可答案

查看全部评分

《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

5
发表于 2013-6-19 08:59:24 | 只看该作者
你换台电脑先试试,如果换电脑也不能存读档就是工具问题,如果能就是电脑问题
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
196
在线时间
835 小时
注册时间
2012-9-16
帖子
1811
4
发表于 2013-6-19 07:36:27 | 只看该作者
game_map脚本问题?!地图问题?!

建议发全工程

——旧坑欢迎戳
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
153 小时
注册时间
2010-12-18
帖子
167
3
 楼主| 发表于 2013-6-18 21:56:19 | 只看该作者
搜索了一下站内,看来很多人曾经也遇到这样的问题,但是都是无法解决。。。。。

点评

你必须上工程了。  发表于 2013-6-18 22:23
第一个游戏《神马传说》完成度:
策划:★★★★★★★★★★ 100%
素材:★★★★★★★★★★ 100%
脚本:★★★★★★★★★★ 100%
数据库:★★★★★★★★★★ 100%
剧情:★★★★★★★★★★ 100%
BUG修复:★★★★★★★★★★ 100%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
1083 小时
注册时间
2013-3-29
帖子
2394
2
发表于 2013-6-18 20:55:11 | 只看该作者
开个新工程把没改过的脚本覆盖上去试试?

点评

这个脚本本来就没改动过啊。。原本都没事的,自从脱离了VX制作器后就这样了。  发表于 2013-6-18 21:13

坑的进度如上                                                                                                        点击↑
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-5 13:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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