以下引用tranpol于2007-8-3 6:09:43的发言:
本贴悬赏额度如下:VIP:0 积分:100 好人卡:1
要做一个图鉴系统
每打通一张CG就开一个开关
在存档的时候存在新文件CG.rxdata里面
但是只存100~200开关
和只读取CG.rxdata里开关100~200要如何做到
因为只读和只存后面的CG专用开关
游戏其他进程开关就不会受到影响
这个可以办到吗
file = File.open("Save/CG.rxdata", "wb")
Marshal.dump($game_switches,file)
file.close
...俺现在只知道如何保存全部开关的办法...
a = []
for i in 100..200
a.push($game_switches)
end
file = File.open("CG.rxdata", "wb")
Marshal.dump(a,file)
file.close
file = File.open("CG.rxdata", "rb")
a = Marshal.load(file)
file.close
for i in 100..200
$game_switches = a[i-100]
end
file = File.open("Save/CG.rxdata", "wb")
Marshal.dump($game_switches,file)
file.close
以下引用小真·爱舞于2007-8-3 8:23:12的发言:
每一次存档的时候都再存那个CG存档一份。
片头画面的时候读取那个CG存档就可以了...
如果是用事件标题,做一个初始化的公共事件就可以。
以下引用K’于2007-8-3 8:48:51的发言:
偶的笨办法
存档用
a = []
for i in 100..200
a.push($game_switches)
end
file = File.open("CG.rxdata", "wb")
Marshal.dump(a,file)
file.close
读取用
file = File.open("CG.rxdata", "rb")
a = Marshal.load(file)
file.close
for i in 100..200
$game_switches = a[i-100]
end
我把那个save/ 的路径删除了 自己加上
以下引用莉莉雅于2007-8-3 9:39:06的发言:
如果存在$game_switches的话,一般来说因为每个新游戏的game_switch都是个别独立的
在还没有进入游戏前,switches不会被load进来,如果是我的话,实在不会建议用game_switches去做。
不过一定要的话,你可以这样做:
1. 在游戏执行,还没有加载游戏前(Scene_Title前面)就先open CG.rxdata,把switches (size 100的array)读进来,存成$game_cg_switches
2. 载入游戏的时候,当游戏存档的$game_switches被载入后,把$game_cg_switches的0-99盖入$game_switches的100-199 (总之,数量一样就好,要盖哪里都行 XD)
3. 游戏执行中,只要有CG增加,就去变动$game_cg_switches和$game_switches,在变动$game_cg_switches用的method里面可以顺便把$game_cg_switches存入CG.rxdata里面,记得变动$game_cg_switches的时候要调用这个method,不要自己用广域变量就任意设定值了 XD(这样随时要结束游戏都没问题,一样会记入CG浏览画面)
不过,如果游戏里面并不会判断这些cg的switches去进行分歧之类(例如曾经开过某张图,才能看到某剧情里面的另外一张图),其实没有必要非得把CG的开关放进$game_switches。
我自己游戏作的时候就是另外用新的array(还是Hash?忘记了)去记CG开启状况的......
上面实际的code我这里先跳过吧 (得乖乖工作去.....囧rz)
[本贴由作者于 2007-8-3 9:51:23 最后编辑]
以下引用Benavii于2007-8-3 10:51:51的发言:
同上,在Title画面时候开关是没有的。
可以参考一下MOMO的CG系统(虽然那个写的爆长)附带的生成系统文件脚本,专门生成一个文件用来记CG出现与消失的信息,每到一次SceneTitle检查一下,退出和存档的时候再检查一下,这样中途关闭游戏CG模式里也会加图。
其实CG就是图鉴系统,有一种最简单的方法就是初始化一个数组,登录CG时就改写数组里的记录,当文件夹里有与数组的记录相同名称的文件时,就显示文件,否则就是不显示。系统文件初始化脚本里这样写:
for i in 0..2
@cg_inf = "无"
end
在游戏里事件——脚本登录CG2的信息:
$system_data.cg_inf[2] = "CG2"
这样打开CG模式的时候,就会搜索并显示指定路径下有没有CG2.png这张CG。
以下引用Amano于2007-8-3 8:32:54的发言:
如果无法在标题或者其他地方读取到所有游戏过程中已经看过的CG(包括非该档案中看过的),
那么这个CG MODE就不完美了...
就是不知怎么样只存和只读取100-200号的开关丫|||OTL
同只知道保存全部开关的方法.....OTL
以下引用小星子于2007-8-3 11:14:23的发言:
增加一个CG类,和switch类似
class CG
def initialize
@data = []
end
# 这两个方法是这么个写法么?不记得了
def [](id)
return @data[id].nil? ? false : true
end
def []=(id,value)
@data[id] = value
end
end
游戏开始时,生成实例
$cg = CG.new
打开某个CG时,执行脚本$cg[X]=true,当然你没必要从100开始了
存档的时候,把$cg存到CG.rxdata里
file = File.open("Save/CG.rxdata", "wb")
Marshal.dump($cg,file)
file.close
如果你觉得自己执行$cg[X]=true比较费事,那么就在存储时直接把$game_switches[100]到$game_swtiches[200]的内容复制到一个临时数组里,然后存到CG.rxdata里,这样上面写的那些就都可以不用了.其实我自己觉得这样做或许更直接.
启动CG图鉴时
file = File.open("Save/CG.rxdata", "rb")
$cg = Marshal.load(file)
file.close
之后$cg里存储的就是一些类似于开关的东西了,你可以自行根据其值来判断是否已经开启了对应的CG
[本贴由作者于 2007-8-3 11:16:21 最后编辑]
| 欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |