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

Project1

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

[已经解决] 【求助】如何设置全局可存储的常量(rmxp)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
135
在线时间
9 小时
注册时间
2016-12-13
帖子
8
跳转到指定楼层
1
发表于 2017-11-3 09:08:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
游戏设定 玩家在第一次玩之后会进入一段开场动画 然后再过度到主菜单界面(标题界面)
在第一次之后 如果再打开游戏 就不会进入开场动画 而直接进入主菜单界面(标题界面)
自己尝试用 一个变量 ,或者开关 但是没有成功 无论怎样还是要进入开场动画
为了具体点 自己做的 用了跳过标题的脚本 然后进入游戏 游戏了一段时间后触发了条件 这时候 游戏才算正式开始 也就进入了主菜单 开始游戏存档 等等
然后当玩家再次进入游戏 就不需要上述的 开场环节 直接进入主菜单
我在开头环节设置了一个变量初始值为0 在过渡到主菜单的时候变为1 在游戏的最开始 条件分歧 如果该变量等于1 那么就证明玩家已经做过开头 就直接进入主菜单
如果该变量等于0 那么就进行开头环节
但是该方法试验后无效 rmxp的测试系统内无效 我想了想 又打开exe文件执行游戏 但是还是无效 所以这个变量是不能记忆的 或者说不能存储在整个数据中的?
询问下大神们有没有什么好的方法 或者说脚本方面得修改?
谢谢~
哈哈

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

6
发表于 2017-11-3 12:52:44 | 只看该作者
liqihanglove 发表于 2017-11-3 11:21
谢谢,但是第一步的 在 跳过标题 脚本中 读取存储全局开关的文件 是怎么实现的? ...

脚本还没调好,你可以试用一下

这个脚本在载入的时候已经在跳过标题脚本中实现了自动读取,因此无需进行读取的操作。(在这里假设跳过标题的脚本生成了 Game_System)

$game_glob_switches 变量在脚本和事件脚本中都可用,也可在事件的条件分歧中使用。
RUBY 代码复制
  1. #==============================================================================
  2. # ** Game_GlobSwitches
  3. #==============================================================================
  4. # @author  RyanBern
  5. # @date    2017.11.03
  6. # @license (RBLv1)[[url]https://rpg.blue/forum.php?mod=viewthread&tid=403387[/url]]
  7. #------------------------------------------------------------------------------
  8. #  This class handles global switches.
  9. #  Refer to "$game_glob_switches" for the instance of this class.
  10. #------------------------------------------------------------------------------
  11. #  用法:插入到 Main 前,所有脚本之后即可使用,无需额外设置。下面的两个设置
  12. #        区域根据需求自行改变。
  13. #        用全局变量 $game_glob_switches 表示所有全局开关,例如,读取 1 号全局
  14. #        开关请使用:$game_glob_switches[1]
  15. #        写入请使用:$game_glob_switches[1] = true
  16. #  注意:在事件脚本中如果要写入,请在最后一行随便写点注释,否则游戏会卡死(RGSS
  17. #        的 BUG)
  18. #==============================================================================
  19.  
  20. class Game_GlobSwitches
  21.   #--------------------------------------------------------------------------
  22.   # * Constants
  23.   #--------------------------------------------------------------------------
  24.   FileName = "Global.rxdata"           # 全局开关文件名
  25.   Autosave = false                     # 全局开关改变时是否自动存档
  26.   #--------------------------------------------------------------------------
  27.   # * Object Initialization
  28.   #--------------------------------------------------------------------------
  29.   def initialize
  30.     @data = []
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # * Get Switch
  34.   #     switch_id : switch ID
  35.   #--------------------------------------------------------------------------
  36.   def [](switch_id)
  37.     @data[switch_id] == nil ? false : @data[switch_id]
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # * Set Switch
  41.   #     switch_id : switch ID
  42.   #     value     : ON (true) / OFF (false)
  43.   #--------------------------------------------------------------------------
  44.   def []=(switch_id, value)
  45.     @data[switch_id] = value
  46.     save_glob_data if Autosave
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # * Class methods
  50.   #--------------------------------------------------------------------------
  51.   def self.save_glob_data
  52.     filename = FileName
  53.     file = File.open(filename, "wb")
  54.     Marshal.dump($game_glob_switches, file)
  55.     file.close
  56.   end
  57.   def self.load_glob_data
  58.     filename = FileName
  59.     # check if the file exists
  60.     if File.exist?(filename)
  61.       file = File.open(filename, "rb")
  62.       $game_glob_switches = Marshal.load(file)
  63.       file.close
  64.     else
  65.       $game_glob_switches = Game_GlobSwitches.new
  66.       save_glob_data
  67.     end
  68.   end
  69. end
  70.  
  71. #==============================================================================
  72. # ** Plug into Game_System and Interperter
  73. #==============================================================================
  74. class Game_System
  75.   alias rb_initialize_20171103 initialize
  76.   def initialize
  77.     rb_initialize_20171103
  78.     Game_GlobSwitches.load_glob_data
  79.   end
  80. end
  81.  
  82. class Interpreter
  83.   def save_glob_data; Game_GlobSwitches.save_glob_data; end;
  84.   def load_glob_data; Game_GlobSwitches.load_glob_data; end;
  85. end

点评

有需求的话可以更改为 true,才注意到你的点评,抱歉!  发表于 2017-11-20 16:44
谢谢! 可以顺利使用。 但是脚本有一个地方不太理解 就是autosave 为什么要设为false  发表于 2017-11-3 16:37

评分

参与人数 1星屑 +50 收起 理由
guoxiaomi + 50 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
135
在线时间
9 小时
注册时间
2016-12-13
帖子
8
5
 楼主| 发表于 2017-11-3 11:22:40 | 只看该作者
SailCat 发表于 2017-11-3 09:26
Scene_Title里面有一段是判断是否存在存档文件的,44-59行
    # 判定继续的有效性
    # 存档文件一个也不 ...

这个是和存档有无有关系吗?
哈哈
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
135
在线时间
9 小时
注册时间
2016-12-13
帖子
8
4
 楼主| 发表于 2017-11-3 11:21:50 | 只看该作者
RyanBern 发表于 2017-11-3 10:51
注意一个问题:自定义的全局变量默认情况下都不会保存,如果要保存必须要用到外部文件来存储这个变量。为此 ...

谢谢,但是第一步的 在 跳过标题 脚本中 读取存储全局开关的文件 是怎么实现的?

点评

有啊……我就写了个_(:з」∠)_  发表于 2017-11-3 17:15
需要全局开关的脚本,我在论坛上搜了一圈发现没有 XP 的,我写一个好了  发表于 2017-11-3 12:39
哈哈
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

3
发表于 2017-11-3 10:51:58 | 只看该作者
注意一个问题:自定义的全局变量默认情况下都不会保存,如果要保存必须要用到外部文件来存储这个变量。为此,楼主可能需要一个类似于“全局开关”的脚本。刚才找了一圈好像没看到和 XP 有关的发布。

看到楼主使用了跳过标题的脚本,我理解一下楼主的意思。

玩家第一次进入游戏流程:
直接进入游戏场景(跳过标题,直接进入 Scene_Map)-> 主菜单(一定条件下,标题画面)

玩家再次进入游戏:
直接进入主菜单(注意,只要开场场景完成了,不管存不存档,都会看成是这种情况)

假如我的理解是正确的,楼主需要在跳过标题的脚本上做改动。因为我不知道楼主的主菜单是用什么做的,可能是一个脚本或者干脆是用事件做的,处理情况有所不同。


情形一:跳过标题脚本仍然叫做 Scene_Title,主菜单用脚本做的,假设叫做 Scene_MainMenu。可以用下面的步骤:
1. 找到跳过标题的脚本的场景跳转的地方,在这之前读取存储全局开关的文件
2. 判断开关状态,决定是跳转到 Scene_Map 或者 Scene_MainMenu

情形二:跳过标题脚本仍然叫做 Scene_Title,主菜单用事件做的,入口在另一张地图上。可以用下面的步骤:
1. 在 Scene_Title 里载入全局开关的文件
2. 新建一张空地图,并且将主角初始位置设置在这个地图上
3. 在这张空地图上创建一个自动执行的事件,在事件中判断全局开关的状态,然后决定是移动到开场动画的地图还是主菜单的地图
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23186
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

2
发表于 2017-11-3 09:26:12 | 只看该作者
Scene_Title里面有一段是判断是否存在存档文件的,44-59行
RUBY 代码复制
  1. # 判定继续的有效性
  2.     # 存档文件一个也不存在的时候也调查
  3.     # 有効为 @continue_enabled 为 true、無効为 false
  4.     @continue_enabled = false
  5.     for i in 0..3
  6.       if FileTest.exist?("Save#{i+1}.rxdata")
  7.         @continue_enabled = true
  8.       end
  9.     end
  10.     # 继续为有效的情况下、光标停止在继续上
  11.     # 无效的情况下、继续的文字显示为灰色
  12.     if @continue_enabled
  13.       @command_window.index = 1
  14.     else
  15.       @command_window.disable_item(1)
  16.     end


你给改成在有效的情况下,跳过动画就行了……

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 09:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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