Project1

标题: 如何把临时存放的角色特技的变量再代回来? [打印本页]

作者: 幻耶    时间: 2008-4-21 18:40
标题: 如何把临时存放的角色特技的变量再代回来?
变身前把角色当前学会的特技代入一个变量如下:
$temp_skills = $game_actors[1].skills


然后让该角色遗忘所有特技,添加变身后的特技:
for i in 1..130
$game_actors[1].forget_skill(i)
end


最后变身完毕恢复原样,如何让该角色学回原有的特技,让原来的 $temp_skills 代回来呢? [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 沉影    时间: 2008-4-21 19:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: 幻耶    时间: 2008-4-21 19:33
我测试的时候做了两个事件,事件1是暂存当前特技并且遗忘全部特技的脚本:
$temp_skills = $game_actors[1].skills
for i in 1..81
$game_actors[1].forget_skill(i)
end

事件2是学回以前的特技的脚本:
for i in $temp_skills
$game_actors[1].learn_skill(i)
end


然后我测试游戏,先点击事件1再点击事件2,结果遗忘的特技还是没有学回来

作者: 幻耶    时间: 2008-4-21 21:49
在Game_Actor脚本里把 attr_reader :skills改成attr_accessor :skills 也没用啊,遗忘了的特技就学不回来了
作者: link006007    时间: 2008-4-21 21:56
不是没有学回来   是这样只给数组赋值根本就学不回来
当时LZ发那这保存特技的贴时, 我就有回过
"直接给变量赋值数组是值引用吧    这样做对保持原数值无效吧?  好歹也要记录一份拷贝
"
原来那个贴的答案本身不够正确

从ruby的源代码可以看出, 非基本值类型的变量(虽然ruby没有), 赋值基本上都是引用,
因此做拷贝时, 还是老老实实的一个个赋值,或者用clone() 不要直接用等号
作者: 幻耶    时间: 2008-4-21 22:00
具体不知道怎么拷贝??赋值??请教请教。。。
作者: link006007    时间: 2008-4-21 22:23
$temp_skills = $game_actors[1].skills.clone
或者 $temp_skills = Array.new($game_actors[1].skills.size)
for i in $game_actors[1].skills.size
  $temp_skills = $game_actors[1].skills
end
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 幻耶    时间: 2008-4-21 22:27
多谢了!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1