Project1

标题: 判断物品 [打印本页]

作者: 破碎记忆    时间: 2016-10-22 16:19
标题: 判断物品
怎么用脚本判断角色是否持有某个物品
脚本该放在那一类脚本中
作者: 不灭的火炎    时间: 2016-10-22 17:47
为什么要用脚本判断用事件不就行了吗
作者: yang1zhi    时间: 2016-10-22 19:24
    $game_party.items   是道具
    $game_party.weapons   是武器
    $game_party.armors     是防具
是哈希表,{1 => 0 } 这样的格式,前面的是ID,后面的是数量。
$game_party.items[id]    #id也就是道具的ID,也就是箭头前面那个数。这样可以得到,这个哈希表里面,这个箭头前面那个数,的,后面那个数。
加入前面那个数不在这个哈希表里面,会得到NIL
所以判断有没有ID为1的道具,就是
if $game_party.items[1] > 0

作者: RyanBern    时间: 2016-10-24 09:04
yang1zhi 发表于 2016-10-22 19:24
$game_party.items   是道具
    $game_party.weapons   是武器
    $game_party.armors     是防具

RGSS1不将@items等变量在Game_Party内公开是有一定道理的。它涉及到面向对象编程中内部变量的隐藏和对象的封装。如果打开一个新的RMXP工程,你会发现Game_Party中并没有attr_reader :items的声明。这并不是RMXP的问题,而是和@items有关的操作已经封装完毕,无需将它再次公开出来。

具体来说,查看物品数量,获取物品,失去物品都已经有现成的接口,所以你大可不必直接去查看@items的具体内容:
RUBY 代码复制
  1. $game_party.item_number(item_id) # 获取物品数量
  2. $game_party.gain_item(item_id, number) # 获得物品
  3. $game_party.lose_item(item_id, number) # 失去物品


不是这样
RUBY 代码复制
  1. attr_reader :items
  2. $game_party.items[item_id]
  3. $game_party.items[item_id] += n
  4. $game_party.items[item_id] -= n


正如你所说,如果1号物品的数量为0,那么此时强行访问$game_party.items[1]会得到nil或0(取决于@items变量的状态),而 nil 是不能和数字比较大小的。所以
RUBY 代码复制
  1. $game_party.items[1] > 0

仍然是一个有问题的写法。

你可以查看 Game_Party#item_number 的定义,这里面考虑到了所有的情况。既然 RMXP 给你实现了一个比较好的接口,那么为什么不去用呢?

总之,遇到这种读取问题不要总想着去加 attr_reader / attr_accessor。有时候问题看似解决但是会带来很多隐患,这会使得自己陷入无休止的脚本查错任务当中。所以还是有必要注重规范的脚本编写/修改习惯。
作者: 箫声东传    时间: 2016-10-25 10:51
RyanBern 发表于 2016-10-24 09:04
RGSS1不将@items等变量在Game_Party内公开是有一定道理的。它涉及到面向对象编程中内部变量的隐藏和对象 ...

在此借楼一用,话说RB大神有系统的讲解读取数据的教程不,说实在话可能对于我们学脚本的新手(在下学脚本有1个月了,看了紫大人,旅大人的教程,还有癫狂侠客,柳柳和RB的视频教程,现在会自己整合和修改脚本,能够从别人写的脚本里面找启发,然而如果要实现的功能别人没提过只能自己想的时候就尴尬了。。。),经常困扰的问题反倒不是语句和方法看不懂,是在要按照个人要求写一些功能的时候不知道从哪里取数据好,例如知道应该在哪几个类里定义和修改但却不确定要去哪里去读取实例,不同地方的数据都有哪些区别和联系,也不知道写好的方法应该在什么地方调用比较恰当,貌似好些方法放在update里面比较多。
作者: 破碎记忆    时间: 2016-12-16 22:09
RyanBern 发表于 2016-10-24 09:04
RGSS1不将@items等变量在Game_Party内公开是有一定道理的。它涉及到面向对象编程中内部变量的隐藏和对象 ...

如果直接在main之前插入这个判断脚本该怎么定义,能不能直接给个范列工程或图片。




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