Project1

标题: 【实用脚本改造教程】如何判定物品、武器、防具的所持数 [打印本页]

作者: TERENCE    时间: 2009-7-29 23:59
标题: 【实用脚本改造教程】如何判定物品、武器、防具的所持数
本帖最后由 TERENCE 于 2009-7-30 00:44 编辑

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

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

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

找到后在这下面的地方添加这三句,
基本上改造很简单就完成了
  1. attr_reader   :items
  2. attr_reader   :armors
  3. attr_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.
为了一些脚本符号盲,再解释几样东西吧= =
== 相同
>= 以上
<= 以下
>   超过
<   未满
!=  不同
作者: 后知后觉    时间: 2009-7-30 03:00
沙发我来坐坐^_^

讲得很详细啊~~支持一下~~!
作者: 悠悠炸弹    时间: 2009-7-30 13:28
占个楼.
支持一下~
我对脚本一窍不通,还是继续做我的事件派吧~
作者: 越前リョーマ    时间: 2009-7-30 17:20
可能做ARPG的时候会用到吧。
作者: 风雪优游    时间: 2009-7-30 17:27
前来支持,我一般用事件做,工作量大点。
至于武器和防具……本着做不到就绕道,都没有研究过。
现在研究下吧……
作者: 霜冻之狼    时间: 2009-7-30 18:28
龙仔又出教程了吗?赶快来膜拜下.................
作者: WildDagger    时间: 2009-7-30 19:41
雖然簡單不過很推薦XD




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