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

Project1

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

[結帖]緊急!有关全局變量的問題

[复制链接]
david_ng223 该用户已被删除
跳转到指定楼层
1
发表于 2014-5-1 16:23:20 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

8
发表于 2014-5-1 17:28:40 | 只看该作者
首先科普一个常识,写脚本尽量不要用到全局变量。(事实上要是我写RGSS我肯定把那些全局变量写成某个类的实例变量)

然后,把全局变量保存下来会比较麻烦,要改许多东西(见4L脚本),还可能和其他脚本产生奇怪的冲突。

如果一定要全局,比较科学的解决方法是,把这些变量做成伪·全局变量。比如把$debt做成$game_party的实例变量@debt,这样就不用担心存档的问题了。比如你当前的金钱($game_party.gold)本质上就是一个“全局”的变量。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

7
发表于 2014-5-1 17:26:36 | 只看该作者
想起了很久以前看到的的一个好东西 http://rpg.blue/thread-331928-1-1.html

不过游戏变量已经足够了 真的没必要加上自己的全局变量

点评

确实是好东西,虽然用不到,但是这个实现方式学习了~  发表于 2014-5-1 17:34

评分

参与人数 1星屑 +20 收起 理由
taroxd + 20 继续赞同

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21626
在线时间
9413 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

6
发表于 2014-5-1 16:55:16 | 只看该作者
david_ng223 发表于 2014-5-1 16:52
那如果我要再加幾個全局變量,是不是需在第7,11,16行之下添加??


第7行的方法是设置初始值的,不需要的话可以不用添加,另外两个如果你要保存进存档的话就必须添加

另外RM自己不都定义了全局变量$game_variables了吗,为什么还要自己再去定义更多的全局变量?

评分

参与人数 1星屑 +20 收起 理由
taroxd + 20 不需要全局变量+1

查看全部评分

回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
5
 楼主| 发表于 2014-5-1 16:52:15 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21626
在线时间
9413 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

4
发表于 2014-5-1 16:48:41 | 只看该作者
RUBY 代码复制
  1. class << DataManager
  2.   alias m5_20131119_create_game_objects create_game_objects
  3.   alias m5_20131119_make_save_contents make_save_contents
  4.   alias m5_20131119_extract_save_contents extract_save_contents
  5.   def create_game_objects
  6.     m5_20131119_create_game_objects
  7.     $debt = 0
  8.   end
  9.   def make_save_contents
  10.     m5_20131119_make_save_contents
  11.     contents[:debt] = $debt
  12.     contents
  13.   end
  14.   def extract_save_contents(contents)
  15.     m5_20131119_extract_save_contents(contents)
  16.     $debt = contents[:debt]
  17.   end
  18. end


↑存档的时候将你的全局变量保存进存档中

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
3
发表于 2014-5-1 16:42:52 | 只看该作者
最简单的解决方法:直接用事件的变量。
如果要在存档时保存这个变量会比较麻烦(要修改存档的代码
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

2
发表于 2014-5-1 16:28:25 | 只看该作者
是在哪里进行赋值操作的,事件中吗?

存档读档之间关闭了游戏吗?

如果两个问题的答案都是肯定的 那么这种情况很好理解:存档时 并非完完全全存储了全部的变量 只不过存储了游戏对象(Game Object)而已

参阅DataManager:
  1.   #--------------------------------------------------------------------------
  2.   # ● 生成存档内容
  3.   #--------------------------------------------------------------------------
  4.   def self.make_save_contents
  5.     contents = {}
  6.     contents[:system]        = $game_system
  7.     contents[:timer]         = $game_timer
  8.     contents[:message]       = $game_message
  9.     contents[:switches]      = $game_switches
  10.     contents[:variables]     = $game_variables
  11.     contents[:self_switches] = $game_self_switches
  12.     contents[:actors]        = $game_actors
  13.     contents[:party]         = $game_party
  14.     contents[:troop]         = $game_troop
  15.     contents[:map]           = $game_map
  16.     contents[:player]        = $game_player
  17.     contents
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 展开存档内容
  21.   #--------------------------------------------------------------------------
  22.   def self.extract_save_contents(contents)
  23.     $game_system        = contents[:system]
  24.     $game_timer         = contents[:timer]
  25.     $game_message       = contents[:message]
  26.     $game_switches      = contents[:switches]
  27.     $game_variables     = contents[:variables]
  28.     $game_self_switches = contents[:self_switches]
  29.     $game_actors        = contents[:actors]
  30.     $game_party         = contents[:party]
  31.     $game_troop         = contents[:troop]
  32.     $game_map           = contents[:map]
  33.     $game_player        = contents[:player]
  34.   end
复制代码

点评

是在事件中,而且有關閉遊戲,那么請問要如何解決了??  发表于 2014-5-1 16:30

评分

参与人数 1星屑 +100 收起 理由
Sion + 100 感谢帮忙

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 15:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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