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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: tranpol
打印 上一主题 下一主题

如何只存只读开关100~200到文件里

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
2 小时
注册时间
2006-11-10
帖子
931
11
发表于 2007-8-3 18: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。
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
……………………啊咧?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2005-10-25
帖子
108
12
发表于 2007-8-3 19: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
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
小星子=亿万星辰@PSVita
回复 支持 反对

使用道具 举报

Lv1.梦旅人

最BT美攻!

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-3-7
帖子
1407
13
 楼主| 发表于 2007-8-4 11:50:03 | 只看该作者
...俺现在看回贴已经要研究半天才能回言的程度了
个个都是高手啊....
每个人说的都是很好的办法....
俺不知道要认可谁了...


以下引用小真·爱舞于2007-8-3 8:23:12的发言:

每一次存档的时候都再存那个CG存档一份。
片头画面的时候读取那个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 最后编辑]

莉莉雅姐又冒出头来了
呵呵抱一个~~
姐姐是如何做自已的CG系统的....
还要能做出可以自动认CG文件名自动显示...
这才是真正的CG系统啊....


以下引用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。



MOMO的CG系统...俺看了~~
就是因为看的头晕了~而且...必竟是有版权的~~
俺才想自已写个简单一点的CG系统..
俺的想法是用事件......俺脚本比较小白点
可以自动认图片文件名...这才是完美的~~
不过...俺详细不知该咋写了~~
要再回去好好研究研究讨论讨论~~~


另~~~

以下引用Amano于2007-8-3 8:32:54的发言:

如果无法在标题或者其他地方读取到所有游戏过程中已经看过的CG(包括非该档案中看过的),
那么这个CG MODE就不完美了...

就是不知怎么样只存和只读取100-200号的开关丫|||OTL
同只知道保存全部开关的方法.....OTL


抱抱A
呵呵谢谢你的那个脚本...俺在努力肢解...

在想在用CLASS CG的办法做个CG专用变量
也许就能用Benavii大的提示做脚本版的CG系统了.....
可能对我来说难了点...所以俺要再爬一会了....

骑士の圣堂最终版华丽丽登场~~

http://rpg.blue/viewthread.php?tid=116851
AVG原创自制游戏  
神の大陆出品
神之大陆游戏制作小组唯美为主BT为终(偏BL向)
欢迎来搅合BLOG:http://hi.baidu.com/tranpol
官网:http://tierradesagrado.uueasy.com/
回复 支持 反对

使用道具 举报

Lv1.梦旅人

最BT美攻!

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-3-7
帖子
1407
14
 楼主| 发表于 2007-8-4 11:55:24 | 只看该作者
以下引用小星子于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 最后编辑]



恩恩这个方法做CG系统非常合适
...详细的语句俺要慢慢磨了
唉~~有人帮俺写个完整版的就好了



关于结贴...
俺好人卡不多了~~~所以俺追加VIP...
几个说的好的俺都认可....
因为K`是解答俺问的问题
所以好人卡给了他
其他人一人一VIP.....
骑士の圣堂最终版华丽丽登场~~

http://rpg.blue/viewthread.php?tid=116851
AVG原创自制游戏  
神の大陆出品
神之大陆游戏制作小组唯美为主BT为终(偏BL向)
欢迎来搅合BLOG:http://hi.baidu.com/tranpol
官网:http://tierradesagrado.uueasy.com/
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-6-29 14:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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