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

Project1

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

[已经解决] 判断物品

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
94 小时
注册时间
2016-10-21
帖子
48
跳转到指定楼层
1
发表于 2016-10-22 16:19:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
怎么用脚本判断角色是否持有某个物品
脚本该放在那一类脚本中

Lv3.寻梦者

梦石
0
星屑
1864
在线时间
949 小时
注册时间
2011-6-18
帖子
360

开拓者

2
发表于 2016-10-22 17:47:28 | 只看该作者
为什么要用脚本判断用事件不就行了吗
当我还年轻时,我拥有自由,不过我没有看到,我拥有时间,不过我没注意到,我拥有爱,但我没感觉到,很多年已经过去了,在我真正懂得这三者的含义之前,但现在,在我生命中的黄昏,这些认知逐渐转变成了幸福。爱,自由,时间,曾经随意丢弃的这些,原来正是驱使我前行的动力。————————《刺客信条余烬》
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

3
发表于 2016-10-22 19:24:09 | 只看该作者
    $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

点评

哦,那一定是缺少了attr_reader :items  发表于 2016-10-23 22:05
一般来说,这样做是不行的。请使用$game_party.item_number(item_id)  发表于 2016-10-23 20:17
回复 支持 0 反对 1

使用道具 举报

Lv4.逐梦者 (版主)

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

开拓者贵宾剧作品鉴家

4
发表于 2016-10-24 09:04:55 | 只看该作者
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-24 11:57
受教了。我知道不公开有这个用。  发表于 2016-10-24 11:56
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
104 小时
注册时间
2016-8-8
帖子
54
5
发表于 2016-10-25 10:51:02 | 只看该作者
RyanBern 发表于 2016-10-24 09:04
RGSS1不将@items等变量在Game_Party内公开是有一定道理的。它涉及到面向对象编程中内部变量的隐藏和对象 ...

在此借楼一用,话说RB大神有系统的讲解读取数据的教程不,说实在话可能对于我们学脚本的新手(在下学脚本有1个月了,看了紫大人,旅大人的教程,还有癫狂侠客,柳柳和RB的视频教程,现在会自己整合和修改脚本,能够从别人写的脚本里面找启发,然而如果要实现的功能别人没提过只能自己想的时候就尴尬了。。。),经常困扰的问题反倒不是语句和方法看不懂,是在要按照个人要求写一些功能的时候不知道从哪里取数据好,例如知道应该在哪几个类里定义和修改但却不确定要去哪里去读取实例,不同地方的数据都有哪些区别和联系,也不知道写好的方法应该在什么地方调用比较恰当,貌似好些方法放在update里面比较多。

点评

应该再细细品味一下RM的调用规则,每个类的update都是被反复执行的,所有的工作都在update里面实现,有问题可私信。  发表于 2016-10-28 07:00
暂时没有。因为游戏里的数据太多了,不知道你想要读取哪些部分的数据。你可以先把你的问题整理一下,然后在这里发个帖子,我会帮你看看。  发表于 2016-10-25 11:57
人性是物性的绽放,人道是天道的赓续。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
94 小时
注册时间
2016-10-21
帖子
48
6
 楼主| 发表于 2016-12-16 22:09:43 手机端发表。 | 只看该作者
RyanBern 发表于 2016-10-24 09:04
RGSS1不将@items等变量在Game_Party内公开是有一定道理的。它涉及到面向对象编程中内部变量的隐藏和对象 ...

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 06:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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