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

Project1

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

[已经解决] 游戏读档会SKILLS会被重置问题

[复制链接]

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

跳转到指定楼层
1
发表于 2017-5-1 11:24:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 RyanBern 于 2017-5-1 16:40 编辑

问题是出在这个。不执行这条就还是旧的SKILLS。执行了就被重置了。
可是他说# 回避由于载入造成的角色再设置的问题。
不执行是不是不好
$game_party.refresh


RUBY 代码复制
  1. def refresh
  2.     # 游戏数据载入后角色对像直接从 $game_actors
  3.     # 分离。
  4.     # 回避由于载入造成的角色再设置的问题。
  5.     new_actors = []
  6.     for i in [email]0...@actors.size[/email]
  7.       if $data_actors[@actors[i].id] != nil
  8.         new_actors.push($game_actors[@actors[i].id])
  9.         p new_actors[i].skills
  10.       end
  11.     end
  12.     @actors = new_actors
  13.   end

点评

我现在在def refresh下一行添加return 暂时没发现问题  发表于 2017-5-1 21:48
如果只是技能次序问题的话,和这个没有关系。  发表于 2017-5-1 16:49
不是全部注释,那样就没队员了。把加入和离开队员,以及读档注释掉应该没问题。  发表于 2017-5-1 16:48
这个具体的没试过,一般说来没问题啊?! 加入和离开队员都要进行此项操作,可以把这个全部注释看有没不良反应。  发表于 2017-5-1 16:47
没有,我不知道为什么这个复制后的是这样,脚本内和你写的是一样的  发表于 2017-5-1 15:57

Lv4.逐梦者 (版主)

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

开拓者贵宾剧作品鉴家

2
发表于 2017-5-1 16:51:11 | 只看该作者
$game_party.refresh 这句话是有必要的,它的作用如注释所说,它是为了同步
$game_actors 里的角色 与 $game_party.actors 里的角色,如果不加则会造成二者不一致,游戏在执行过程中,有时候修改前者的数据,有时候修改后者的数据。

更麻烦的是,如果一开始没有注意的话,这两个数据的差别就会越来越大,所以必须在每次读档的时候同步。因此主楼所说的重置问题可能是使用了极其久远的存档,并且在很久之前就去掉了这句话。

更细致的讨论请见下面帖子的主楼,章节 0.3
https://rpg.blue/forum.php?mod=viewthread&tid=335455

点评

默认脚本下,必须一致,否则会出错。如果你的工程有较大改动,请贴出改动的脚本  发表于 2017-5-1 22:25
话说$game_actors和$game_party.actors里的角色有必要一致吗。我是相同的一个角色也有多个不同的存在  发表于 2017-5-1 21:44
默认的技能规则是学会等级下的所有技能。我做了更改,只学会1级技能,其他随机。  发表于 2017-5-1 21:41
并不是很久前的存档。测试时存档的,存几次都是这样。是@data的问题,存档前就和队伍对不上了。读档后获取的是@data的内容。  发表于 2017-5-1 21:40
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

3
 楼主| 发表于 2017-5-1 22:47:12 | 只看该作者
RyanBern 发表于 2017-5-1 16:51
$game_party.refresh 这句话是有必要的,它的作用如注释所说,它是为了同步
$game_actors 里的角色 与 $gam ...

改动太多了,不好贴。XAS都改得面目全非了。
添加队伍不是用的add_actor = $game_actors[actor_id].dup吗
@actors.push(add_actor)
后面DUP不是已经和$game_actors不一致了吗。
还可以对add_actor进行修正在PUSH进队伍。
我Game_Actor < Game_Battler
里面setup(actor_id)里的数值很多是不固定的。
还有后期也会有数值不固定的。
添加队伍是用的DUP,每次可以获得不同的相同角色数据。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

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

开拓者贵宾剧作品鉴家

4
发表于 2017-5-1 23:22:24 | 只看该作者
本帖最后由 RyanBern 于 2017-5-1 23:25 编辑
yang1zhi 发表于 2017-5-1 22:47
改动太多了,不好贴。XAS都改得面目全非了。
添加队伍不是用的add_actor = $game_actors[actor_id].dup吗 ...


如果将 $game_actors 作为角色的模板库无限生成角色的话,不应该同步。请确认在你的游戏中 $game_actors 只有这一个功能。如果不是,请明确 $game_actors 在你的系统中有哪些功能

另外个人觉得使用模板生成角色数据的姿势有问题。首先,使用 dup (或者 clone)只是对对象进行浅层次的拷贝,从效果来看,它只会拷贝“第一层的数据”(例如数字,true 或者 false),不会拷贝所谓的“引用”。@skills 在 Game_Actor 类里应该是 Array(或者 Hash,记不清了),无论哪种情况,dup 都不会真正去拷贝它,而是只去拷贝一个引用。
RUBY 代码复制
  1. class A
  2.   attr_accessor :id
  3.   attr_accessor :skills
  4.   def initialize
  5.     @id = 0
  6.     @skills = [0]
  7.   end
  8. end
  9.  
  10. a1 = A.new
  11. a2 = a1.dup
  12. a2.id = 1
  13. a2.skills[0] = 1
  14. p a2.id # => 1
  15. p a1.id # => 0,无问题,即时值不受影响
  16. p a2.skills[0] # => 1
  17. p a1.skills[0] # => 1,注意,这里只是拷贝引用,因此数组 @skills 并未真正复制


另外请注意提问题的方式,如果你使用了非默认的脚本/系统请务必指出来,以免对回答者造成困扰。

点评

恩,就是开新游戏,添加两次add_actor = $game_actors[actor_id].dup,PUSH进队伍。  发表于 2017-5-2 22:03
不是的。如果用新档测试,然后连续dup两个蝙蝠呢?  发表于 2017-5-2 21:37
应该是PUSH的关系吧。PUSH添加的都会变成新的独立的。  发表于 2017-5-2 21:34
可以测试一下我的代码,体会其中的区别。思考一下为什么你得到的结果为什么会不同。  发表于 2017-5-2 21:05
我刚测试了我的。同一只蝙蝠,修改一只的SKILLS,另一只没有影响。  发表于 2017-5-2 20:06
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

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

开拓者贵宾剧作品鉴家

5
发表于 2017-5-2 22:09:29 | 只看该作者
yang1zhi 发表于 2017-5-1 22:47
改动太多了,不好贴。XAS都改得面目全非了。
添加队伍不是用的add_actor = $game_actors[actor_id].dup吗 ...

RUBY 代码复制
  1. a = []
  2. actor = $game_actors[1].dup
  3. a.push actor
  4. actor = $game_actors[1].dup
  5. a.push actor
  6. a[0].learn_skill(1)
  7. p a[0].skills, a[1].skills

这是简单的测试脚本,在新游戏下仍然输出 [1, 57]。

可能是你的第三方脚本还进行了别的操作。

点评

我知道了$game_actors[@parameters[0]].setup(@parameters[0])  发表于 2017-5-2 23:38
运行你这个脚本后,两个是相同的SKILL  发表于 2017-5-2 22:48
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-21 20:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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