查看: 5199|回复: 27

[已经解决]

修改了存档界面样式(大概)之后,进游戏读档报错...

[复制链接]

松野栗

松野栗

当前离线

赞0

VIP0

好人卡0

积分1

经验1986

最后登录2017-9-17

在线时间18 小时

写轮眼

Lv1.梦旅人

梦石0

星屑50

在线时间18 小时

注册时间2017-6-4

帖子19

发消息

电梯直达

1楼

发表于 2017-7-4 00:21:19

|

只看该作者

|倒序浏览

|阅读模式

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

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

x

如题问题,在改完存档窗口分布之后测试时点继续就会报错...如图。。

为什么会在这里报错哇,看了半天也不太知道跟我刚刚改的东西的关系...

顺便如果点新游戏。存档什么的都可以,甚至点结束然后回到标题画面也能正常读档....

大佬们救命...

QQ图片20170704011343.png

(14.78 KB, 下载次数: 13)

下载附件

保存到相册

2017-7-4 00:05 上传

收藏1

分享

回复

使用道具

举报

提升卡

沉默号角

喧嚣号角

变色卡

升龙剑

张咚咚

张咚咚

当前离线

赞120

VIP13

好人卡16

积分194

经验38692

最后登录2025-5-4

在线时间3081 小时

写轮眼

Lv4.逐梦者

梦石0

星屑19396

在线时间3081 小时

注册时间2013-1-11

帖子1289

发消息

2楼

发表于 2017-7-4 07:49:49

|

只看该作者

。。。脚本都没有,怎么帮你

梦幻冒险记 / 丝丝和条条 / 画迹2

回复

支持

反对

使用道具

举报

guoxiaomi

guoxiaomi

当前离线

赞400

VIP0

好人卡24

积分250

经验45372

最后登录2024-7-2

在线时间3339 小时

写轮眼

Lv5.捕梦者 (版主)

梦石1

星屑23989

在线时间3339 小时

注册时间2011-7-8

帖子3926

发消息

3楼

发表于 2017-7-4 11:11:09

|

只看该作者

旧的存档不通用?新存档也不能读吗

熟悉rgss和ruby,xp区版主~

正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。

已上steam:与TXBD合作的Reformers《变革者》

* 战斗调用公共事件 *

* RGSOS 网络脚本 *

回复

支持

反对

使用道具

举报

yang1zhi

yang1zhi

当前离线

赞204

VIP13

好人卡7

积分122

经验52899

最后登录2021-6-29

在线时间4435 小时

写轮眼

Lv4.逐梦者

梦石0

星屑12157

在线时间4435 小时

注册时间2014-4-11

帖子5955

发消息

4楼

发表于 2017-7-4 14:23:43

|

只看该作者

你改了哪里啊。是不是改了存档内容

回复

支持

反对

使用道具

举报

松野栗

松野栗

当前离线

赞0

VIP0

好人卡0

积分1

经验1986

最后登录2017-9-17

在线时间18 小时

写轮眼

Lv1.梦旅人

梦石0

星屑50

在线时间18 小时

注册时间2017-6-4

帖子19

发消息

5楼

楼主|

发表于 2017-7-4 21:08:19

|

只看该作者

#==============================================================================

# ■ Window_SaveFile

#------------------------------------------------------------------------------

# 显示存档以及读档画面、保存文件的窗口。

#==============================================================================

class Window_SaveFile < Window_Base

#--------------------------------------------------------------------------

# ● 定义实例变量

#--------------------------------------------------------------------------

attr_reader :filename # 文件名

attr_reader :selected # 选择状态

#--------------------------------------------------------------------------

# ● 初始化对像

# file_index : 存档文件的索引 (0~3)

# filename : 文件名

#--------------------------------------------------------------------------

def initialize(file_index, filename)

super(0, 64 + file_index % 4 * 104, 640, 104)

self.contents = Bitmap.new(width - 32, height - 32)

@file_index = file_index

@filename = "Save#{@file_index + 1}.rxdata"

@time_stamp = Time.at(0)

@file_exist = FileTest.exist?(@filename)

if @file_exist

file = File.open(@filename, "r")

@time_stamp = file.mtime

@characters = Marshal.load(file)

@frame_count = Marshal.load(file)

@game_system = Marshal.load(file)

@game_switches = Marshal.load(file)

@game_variables = Marshal.load(file)

@total_sec = @frame_count / Graphics.frame_rate

file.close

end

refresh

@selected = false

end

#--------------------------------------------------------------------------

# ● 刷新

#--------------------------------------------------------------------------

def refresh

self.contents.clear

# 描绘文件编号

self.contents.font.color = normal_color

name = "文件 #{@file_index + 1}"

self.contents.draw_text(4, 0, 600, 32, name)

@name_width = contents.text_size(name).width

# 存档文件存在的情况下

if @file_exist

# 描绘角色

for i in [email protected]

bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])

cw = bitmap.rect.width / 4

ch = bitmap.rect.height / 4

src_rect = Rect.new(0, 0, cw, ch)

x = 300 - @characters.size * 32 + i * 64 - cw / 2

self.contents.blt(x, 68 - ch, bitmap, src_rect)

end

# 描绘游戏时间

hour = @total_sec / 60 / 60

min = @total_sec / 60 % 60

sec = @total_sec % 60

time_string = sprintf("%02d:%02d:%02d", hour, min, sec)

self.contents.font.color = normal_color

self.contents.draw_text(4, 8, 600, 32, time_string, 2)

# 描绘时间标记

self.contents.font.color = normal_color

time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")

self.contents.draw_text(4, 40, 600, 32, time_string, 2)

end

end

#--------------------------------------------------------------------------

# ● 设置选择状态

# selected : 新的选择状态 (true=选择 false=不选择)

#--------------------------------------------------------------------------

def selected=(selected)

@selected = selected

update_cursor_rect

end

#--------------------------------------------------------------------------

# ● 刷新光标矩形

#--------------------------------------------------------------------------

def update_cursor_rect

if @selected

self.cursor_rect.set(0, 0, @name_width + 8, 32)

else

self.cursor_rect.empty

end

end

end复制代码

回复

支持

反对

使用道具

举报

松野栗

松野栗

当前离线

赞0

VIP0

好人卡0

积分1

经验1986

最后登录2017-9-17

在线时间18 小时

写轮眼

Lv1.梦旅人

梦石0

星屑50

在线时间18 小时

注册时间2017-6-4

帖子19

发消息

6楼

楼主|

发表于 2017-7-4 21:10:07

|

只看该作者

松野栗 发表于 2017-7-4 21:08

照理说我应该是就改了这里的几个坐标数字...但是也不确定是不是之前改的什么导致的但是我没注意到

回复

支持

反对

使用道具

举报

松野栗

松野栗

当前离线

赞0

VIP0

好人卡0

积分1

经验1986

最后登录2017-9-17

在线时间18 小时

写轮眼

Lv1.梦旅人

梦石0

星屑50

在线时间18 小时

注册时间2017-6-4

帖子19

发消息

7楼

楼主|

发表于 2017-7-4 21:12:31

|

只看该作者

#==============================================================================

# ■ Spriteset_Map

#------------------------------------------------------------------------------

# 处理地图画面活动块和元件的类。本类在

# Scene_Map 类的内部使用。

#==============================================================================

class Spriteset_Map

#--------------------------------------------------------------------------

# ● 初始化对像

#--------------------------------------------------------------------------

def initialize

# 生成显示端口

@viewport1 = Viewport.new(0, 0, 640, 480)

@viewport2 = Viewport.new(0, 0, 640, 480)

@viewport3 = Viewport.new(0, 0, 640, 480)

@viewport2.z = 200

@viewport3.z = 5000

# 生成元件地图

@tilemap = Tilemap.new(@viewport1)

@tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name) #这是报错的地方

for i in 0..6

autotile_name = $game_map.autotile_names[i]

@tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)

end

@tilemap.map_data = $game_map.data

@tilemap.priorities = $game_map.priorities

# 生成远景平面

[url=home.php?mod=space&uid=2658185]@Panorama[/url] = Plane.new(@viewport1)

@panorama.z = -1000

# 生成雾平面

[url=home.php?mod=space&uid=14217]@fog[/url] = Plane.new(@viewport1)

@fog.z = 3000

# 生成角色活动块

@character_sprites = []

for i in $game_map.events.keys.sort

sprite = Sprite_Character.new(@viewport1, $game_map.events[i])

@character_sprites.push(sprite)

end

@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))

# 生成天气

@weather = RPG::Weather.new(@viewport1)

# 生成图片

@picture_sprites = []

for i in 1..50

@picture_sprites.push(Sprite_Picture.new(@viewport2,

$game_screen.pictures[i]))

end

# 生成计时器块

@timer_sprite = Sprite_Timer.new

# 刷新画面

update

end

#--------------------------------------------------------------------------

# ● 释放

#--------------------------------------------------------------------------

def dispose

# 释放元件地图

@tilemap.tileset.dispose

for i in 0..6

@tilemap.autotiles[i].dispose

end

@tilemap.dispose

# 释放远景平面

@panorama.dispose

# 释放雾平面

@fog.dispose

# 释放角色活动块

for sprite in @character_sprites

sprite.dispose

end

# 释放天候

@weather.dispose

# 释放图片

for sprite in @picture_sprites

sprite.dispose

end

# 释放计时器块

@timer_sprite.dispose

# 释放显示端口

@viewport1.dispose

@viewport2.dispose

@viewport3.dispose

end

#--------------------------------------------------------------------------

# ● 刷新画面

#--------------------------------------------------------------------------

def update

# 远景与现在的情况有差异发生的情况下

if @panorama_name != $game_map.panorama_name or

@panorama_hue != $game_map.panorama_hue

@panorama_name = $game_map.panorama_name

@panorama_hue = $game_map.panorama_hue

if @panorama.bitmap != nil

@panorama.bitmap.dispose

@panorama.bitmap = nil

end

if @panorama_name != ""

@panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)

end

Graphics.frame_reset

end

# 雾与现在的情况有差异的情况下

if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue

@fog_name = $game_map.fog_name

@fog_hue = $game_map.fog_hue

if @fog.bitmap != nil

@fog.bitmap.dispose

@fog.bitmap = nil

end

if @fog_name != ""

@fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)

end

Graphics.frame_reset

end

# 刷新元件地图

@tilemap.ox = $game_map.display_x / 4

@tilemap.oy = $game_map.display_y / 4

@tilemap.update

# 刷新远景平面

@panorama.ox = $game_map.display_x / 8

@panorama.oy = $game_map.display_y / 8

# 刷新雾平面

@fog.zoom_x = $game_map.fog_zoom / 100.0

@fog.zoom_y = $game_map.fog_zoom / 100.0

@fog.opacity = $game_map.fog_opacity

@fog.blend_type = $game_map.fog_blend_type

@fog.ox = $game_map.display_x / 4 + $game_map.fog_ox

@fog.oy = $game_map.display_y / 4 + $game_map.fog_oy

@fog.tone = $game_map.fog_tone

# 刷新角色活动块

for sprite in @character_sprites

sprite.update

end

# 刷新天候图形

@weather.type = $game_screen.weather_type

@weather.max = $game_screen.weather_max

@weather.ox = $game_map.display_x / 4

@weather.oy = $game_map.display_y / 4

@weather.update

# 刷新图片

for sprite in @picture_sprites

sprite.update

end

# 刷新计时器块

@timer_sprite.update

# 设置画面的色调与震动位置

@viewport1.tone = $game_screen.tone

@viewport1.ox = $game_screen.shake

# 设置画面的闪烁色

@viewport3.color = $game_screen.flash_color

# 刷新显示端口

@viewport1.update

@viewport3.update

end

end

复制代码

回复

支持

反对

使用道具

举报

松野栗

松野栗

当前离线

赞0

VIP0

好人卡0

积分1

经验1986

最后登录2017-9-17

在线时间18 小时

写轮眼

Lv1.梦旅人

梦石0

星屑50

在线时间18 小时

注册时间2017-6-4

帖子19

发消息

8楼

楼主|

发表于 2017-7-4 21:14:45

|

只看该作者

guoxiaomi 发表于 2017-7-4 11:11

旧的存档不通用?新存档也不能读吗

在游戏里面回归标题画面就可以顺利读档,但是直接打开程序选读档就会显示上面的脚本错误

回复

支持

反对

使用道具

举报

rt6543ew

rt6543ew

当前离线

赞1

VIP0

好人卡0

积分2

经验3518

最后登录2020-12-28

在线时间78 小时

写轮眼

Lv1.梦旅人

梦石0

星屑152

在线时间78 小时

注册时间2012-8-16

帖子44

发消息

9楼

发表于 2017-7-4 22:16:03

|

只看该作者

建议把Scene_Load和Scene_Save发上来

或者重开游戏,进入初始人物所在地图之外的另一个地图,存档后再重开游戏,然后在初始人物所在地图不存档返回标题界面,读第一次存的档看看有没有什么异常

回复

支持

反对

使用道具

举报

松野栗

松野栗

当前离线

赞0

VIP0

好人卡0

积分1

经验1986

最后登录2017-9-17

在线时间18 小时

写轮眼

Lv1.梦旅人

梦石0

星屑50

在线时间18 小时

注册时间2017-6-4

帖子19

发消息

10楼

楼主|

发表于 2017-7-4 22:52:50

|

只看该作者

#==============================================================================

# ■ Scene_Load

#------------------------------------------------------------------------------

# 处理读档画面的类。

#==============================================================================

[code]#==============================================================================

# ■ Scene_Save

#------------------------------------------------------------------------------

# 处理存档画面的类。

#==============================================================================

class Scene_Save < Scene_File

#--------------------------------------------------------------------------

# ● 初始化对像

#--------------------------------------------------------------------------

def initialize

super("存档")

end

#--------------------------------------------------------------------------

# ● 确定时的处理

#--------------------------------------------------------------------------

def on_decision(filename)

# 演奏存档 SE

$game_system.se_play($data_system.save_se)

# 写入存档数据

file = File.open(filename, "wb")

write_save_data(file)

file.close

# 如果被事件调用

if $game_temp.save_calling

# 清除存档调用标志

$game_temp.save_calling = false

# 切换到地图画面

$scene = Scene_Map.new

return

end

# 切换到菜单画面

$scene = Scene_Menu.new(4)

end

#--------------------------------------------------------------------------

# ● 取消时的处理

#--------------------------------------------------------------------------

def on_cancel

# 演奏取消 SE

$game_system.se_play($data_system.cancel_se)

# 如果被事件调用

if $game_temp.save_calling

# 清除存档调用标志

$game_temp.save_calling = false

# 切换到地图画面

$scene = Scene_Map.new

return

end

# 切换到菜单画面

$scene = Scene_Menu.new(4)

end

#--------------------------------------------------------------------------

# ● 写入存档数据

# file : 写入用文件对像 (已经打开)

#--------------------------------------------------------------------------

def write_save_data(file)

# 生成描绘存档文件用的角色图形

characters = []

for i in 0...$game_party.actors.size

actor = $game_party.actors[i]

characters.push([actor.character_name, actor.character_hue])

end

# 写入描绘存档文件用的角色数据

Marshal.dump(characters, file)

# 写入测量游戏时间用画面计数

Marshal.dump(Graphics.frame_count, file)

# 增加 1 次存档次数

$game_system.save_count += 1

# 保存魔法编号

# (将编辑器保存的值以随机值替换)

$game_system.magic_number = $data_system.magic_number

# 写入各种游戏对像

Marshal.dump($game_system, file)

Marshal.dump($game_switches, file)

Marshal.dump($game_variables, file)

Marshal.dump($game_self_switches, file)

Marshal.dump($game_screen, file)

Marshal.dump($game_actors, file)

Marshal.dump($game_party, file)

Marshal.dump($game_troop, file)

Marshal.dump($game_map, file)

Marshal.dump($game_player, file)

end

end

复制代码

class Scene_Load < Scene_File

#--------------------------------------------------------------------------

# ● 初始化对像

#--------------------------------------------------------------------------

def initialize

# 再生成临时对像

$game_temp = Game_Temp.new

# 选择存档时间最新的文件

$game_temp.last_file_index = 0

latest_time = Time.at(0)

for i in 0..3

filename = make_filename(i)

if FileTest.exist?(filename)

file = File.open(filename, "r")

if file.mtime > latest_time

latest_time = file.mtime

$game_temp.last_file_index = i

end

file.close

end

end

super("要载入哪个文件?")

end

#--------------------------------------------------------------------------

# ● 确定时的处理

#--------------------------------------------------------------------------

def on_decision(filename)

# 文件不存在的情况下

unless FileTest.exist?(filename)

# 演奏冻结 SE

$game_system.se_play($data_system.buzzer_se)

return

end

# 演奏读档 SE

$game_system.se_play($data_system.load_se)

# 写入存档数据

file = File.open(filename, "rb")

read_save_data(file)

file.close

# 还原 BGM、BGS

$game_system.bgm_play($game_system.playing_bgm)

$game_system.bgs_play($game_system.playing_bgs)

# 刷新地图 (执行并行事件)

$game_map.update

# 切换到地图画面

$scene = Scene_Map.new

end

#--------------------------------------------------------------------------

# ● 取消时的处理

#--------------------------------------------------------------------------

def on_cancel

# 演奏取消 SE

$game_system.se_play($data_system.cancel_se)

# 切换到标题画面

$scene = Scene_Title.new

end

#--------------------------------------------------------------------------

# ● 读取存档数据

# file : 读取用文件对像 (已经打开)

#--------------------------------------------------------------------------

def read_save_data(file)

# 读取描绘存档文件用的角色数据

characters = Marshal.load(file)

# 读取测量游戏时间用画面计数

Graphics.frame_count = Marshal.load(file)

# 读取各种游戏对像

$game_system = Marshal.load(file)

$game_switches = Marshal.load(file)

$game_variables = Marshal.load(file)

$game_self_switches = Marshal.load(file)

$game_screen = Marshal.load(file)

$game_actors = Marshal.load(file)

$game_party = Marshal.load(file)

$game_troop = Marshal.load(file)

$game_map = Marshal.load(file)

$game_player = Marshal.load(file)

# 魔法编号与保存时有差异的情况下

# (加入编辑器的编辑过的数据)

if $game_system.magic_number != $data_system.magic_number

# 重新装载地图

$game_map.setup($game_map.map_id)

$game_player.center($game_player.x, $game_player.y)

end

# 刷新同伴成员

$game_party.refresh

end

end

[/code]

回复

支持

反对

使用道具

举报