じ☆ve冰风 发表于 2024-4-19 16:46:20

【实用脚本改造教程】如何判定物品、武器、防具的所持数

【实用脚本改造教程】如何判定物品、武器、防具的所持数
======================================================
◎前言
最近刚好要用到这种效果,所以在此分享我的思路。
不知道这种类似的教程,是否以前就有发过了,
儘管发过,我也以详述的方式来介绍,
这是真对RUBY物件导向(对象指向)有基础认识的人所做的教程,
希望这个脚本改造教程对你们有帮助。
当然脚本盲,跟著该教程一同改造,也能达成。

◎默认事件的基本实现办法与限制
我想这对事件派的人,是在简单不过的事了。
只要利用变量操作,就可以实现判定物品的所持数。
金钱更不用说,默认事件的条件分歧裡就可以直接判定...
但是纯事件却无法判定武器、防具的所持数。
即便是用变量加减来决定得到失去武器、防具的所持数,
在买卖武器、防具,会变得很不好处理,
而且可能使用大量的变量与併行处理事件。

◎实用脚本改造
开啟脚本编辑器找到Game_Party这个类别,
在这裡面你会看到定义实例变数的地方如下:
#--------------------------------------------------------------------------
# ● 定义实例变数
#--------------------------------------------------------------------------
attr_reader   :actors                  # 角色
attr_reader   :gold                     # 金钱
attr_reader   :steps                   # 步数

找到后在这下面的地方添加这三句,
基本上改造很简单就完成了attr_reader   :itemsattr_reader   :armorsattr_reader   :weapons复制代码

◎原理说明教程 (脚本盲就先跳过吧)
在定义实例变数往下的地方来看,
会看到初始化物件的地方,
#--------------------------------------------------------------------------
# ● 初始化物件
#--------------------------------------------------------------------------
def initialize
# 建立角色序列
@actors = []
# 初始化金钱与步数
@gold =0
@steps =0
# 產生物品、武器、防具的所持数 hash
@items = {}
@weapons = {}
@armors = {}
end

我们发现三个建立物品、武器、防具所持数的哈希表(HASH/杂凑)
@items
@weapons
@armors
这三个实体变数在默认的Game_Party脚本裡,
是无法从物件外部直接读取实体变数,

默认的Game_Party脚本裡,
只允许读取角色、金钱、步数三个实体变数
也就是 @actors @gold @steps 这三个实体变数
说白一点就是默认的Game_Party脚本裡.....
只定义了这三个可读实例变数,如下:
attr_reader   :actors
attr_reader   :gold
attr_reader   :steps

因此在这下面的地方才添加这三句,
attr_reader   :items
attr_reader   :armors
attr_reader   :weapons
让物品、武器、防具三个实体变数可以从外部直接读取

这就是所谓的存取实体变数(的方法)
於是RUBY提供了以下三句 用来快速定义这些方法
attr_reader    # 只定义用来读取实体变数的方法
attr_writer   # 只定义用来写入实体变数的方法
attr_accessor # 定义用来可读可写实体变数的方法

◎如何使用
本类别的实例请是参考於 $game_party
所以要读取物品、武器、防具三个实体变数,就是
$game_party.items
$game_party.armors
$game_party.weapons

因為这三个都是哈希表(HASH/杂凑)
所以只要游戏中 获得物品、武器、防具时,
就会自动将他们的ID(键)与所持数(值)放入其中,
{ ID(键)=>所持数(值) }

故此我们可以在条件分歧的脚本空格裡写上:
$game_party.items[物品ID]==所要判断的所持数
$game_party.armors[武器ID]==所要判断的所持数
$game_party.weapons[防具ID]==所要判断的所持数
这三种判断式,
而且更好的事能判断nil(空)值,
為什麼我说能判断nil(空)值是好事,
这是因為这三个哈希表(HASH/杂凑),
只有在得到新种东西时,会记录在裡头永不消失,
即便该东西的所持数变零时,也会有纪录(这时值会等於零)
{ ID(键)=>0 }

换句话说,就是在没得到新种东西时,
利用这三种判断式访问,会出现nil(空)值,

说明白一点就是能够利用这个nil(空)值或0值
判定该样东西是不是曾经有得到过

改成这个样子后,可以大量减少变量与事件的使用,非常实用=w=

P.S.
正在装备的武器和防具也会影响所持数请务必注意。
武器和防具的所持数是代表在武器栏和防具栏(未装备)的数量

再P.S.
为了一些脚本符号盲,再解释几样东西吧= =
== 相同
>= 以上
   超过
<   未满
!=不同
            本帖来自P1论坛作者TERENCE,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=130122若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 【实用脚本改造教程】如何判定物品、武器、防具的所持数