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

Project1

 找回密码
 注册会员
搜索
Project1 查看内容

[过期VIP]脚本研究报告 (Game系3 至 Game_Battler 1)

2006-4-25 00:00| 发布者: 柳柳| 查看: 2989| 评论: 0|原作者: 66RPG

摘要:   作者 bbschat 版本与更新  2006年1月 相关网址 点此进入发布贴 范例工程   教程内容 Game_Battler :用途:作为Game_Actor(角色) 与 Game_Enemy(敌人) 这两个类的父类定义了一些战
 

作者

bbschat

版本与更新

 2006年1月

相关网址

点此进入发布贴

范例工程

 



教程内容

Game_Battler :

用途:作为Game_Actor(角色) 与 Game_Enemy(敌人) 这两个类的父类定义了一些战斗者共有的属性和方法。

实例:无。

属性:

battler_name:只读属性,角色战斗图的名字,位于Graphics/Battlers目录下,游戏进行时角色战斗图会缓存于 RPG::Cache 中。
battler_hue: 只读属性,角色战斗图的色相,与battler_name同时使用以获取确定色相的角色战斗图。
(同样的图片在使用不同的色相下可产生不同的效果,RM通过色相的引入方便素材较少的游戏设计者增加多个同类角色或敌人)

因为角色战斗图的只读属性,所以修改角色战斗图必须通过固定在Game_Actor和Game_Enemy两个子类里面的方法:

Game_Actor.set_graphic 对应事件的更改角色图形。
Game_Enemy.transform 对应事件的敌人变身。

hp、sp、states:只读属性,角色的HP,SP,和状态。注意states是一个数组,可能包含多个状态。

这三个属性设置成只读并不是说不能修改(无法想象一个HP、SP永远不发生变化的游戏),
Game_Battler类内置的 hp=、sp=,add_state,remove_state 等方法来控制这三个属性的修改规则。

也就是说当程序执行类似 某角色.hp=100 这样的语句 时并不意味着该角色的hp马上变成100,
程序会将100这个参数交给 Game_Battler.hp= 这个方法处理,而将计算后的结果赋给角色的hp属性。
当然sp、力量、灵巧、速度、魔力等其它角色属性的处理也是一样。

这样做主要是为了控制角色属性数据不超过一定的范围,另一方面是因为角色部分属性的变化可能会对角色状态产生影响(主要指那些当作HP为0的状态)。

hidden:可读取属性,是否隐藏。这是敌人(Game_Enemy)专用的属性,用来在战斗中表示逃跑(实际只是隐藏起来)。

immortal:可读取属性,是否不死之身。也是敌人(Game_Enemy)专用的属性,immortal为Ture的敌人战斗中HP耗尽也不会死亡,只有通过事件(更改敌人状态)使敌人获得当作HP为0的状态(一般是战斗不能)才能解除敌人不死之身。

该属性是在数据库的队伍里设置的(鼠标右键点战斗场景中的敌人图片),RM未提供游戏中途将敌人的immortal属性设置为True的方法。

damage_pop:可读取属性,是否弹出伤害数字。为true时战斗者精灵会调用RPG::Sprite的damage方法使伤害的数字或“Miss”“CRITICAL”等字符串弹出在精灵前面。

damage:可读取属性,伤害值。根据命中的情况damage可能是一个数字,也可能是字符串“Miss”

critical:可读取属性,是否会心一击。会心一击会使伤害值加倍,该属性也是RPG::Sprite的damage方法所必需的参数之一。

animation_id:可读取属性,动画ID。该属性不为0时,战斗者精灵会调用RPG::Sprite的animation方法显示指定的动画。

animation_hit:可读取属性,动画是否击中。RPG::Sprite的animation方法必需的参数之一。

white_flash:可读取属性,是否白屏闪烁。为true时战斗者精灵会调用RPG::Sprite的whiten方法。动画ID为0,即没有为伤害设置动画时该属性会被设置为true。

blink:可读取属性,是否闪烁。为true时战斗者精灵会调用RPG::Sprite的blink_on方法,false时调用blink_off方法。针对指令输入中的角色使用的效果。

方法:

maxhp:获取战斗者的MaxHP,虽然后面有maxhp=的方法,看上去和属性类似,但实际上的处理却比较复杂。

1、取得 base_maxhp + @maxhp_plus 的值并控制在 [1,999999]之间。(注意base_maxhp是一个定义在Game_Actor和Game_Enemy两个子类里的方法,用来获取战斗者的基准MaxHP,竟然在父类里面调用子类的方法,不知道EB的程序员是怎么想的-__-,也许只是为缩短代码长度吧。)
2、加乘战斗者当前状态中所有涉及到MaxHP的比率。
3、控制计算结果在[1,999999]之间并返回结果。

maxhp=:设置战斗者的MaxHP。

1、设置内部属性 @maxhp_plus = 传递进来的参数 - 当前的maxhp(注意这里调用的是maxhp的方法,而不是固定的一个值)。
2、控制 @maxhp_plus 的值在 [-9999,9999] 之间。
3、控制 @hp的值不超过当前的maxhp(这里调用的同样是maxhp的方法)

maxsp,maxsp=:获取和设置战斗者的MaxSP,处理方法同MaxHP。获取MaxSP时控制在 [1,9999]之间

str,str= | dex,dex= | agi,agi= | int,int= :获取和设置战斗者的力量 | 灵巧 | 速度 | 魔力,处理方法同MaxHP。
获取值控制在 [1,999]之间,设置值时 XXX_plus 控制在 [-999,999] 之间

hit:获取命中率,100加乘战斗者当前状态中所有涉及到命中的比率。

atk | pdef | mdef:获取战斗者的攻击力 | 物理防御 | 魔法防御,先获得战斗者的相关基准值(同样定义在子类)然后加乘相关状态比率。

eva:获取回避修正,基本回避修正值累加战斗者当前状态中所有涉及到的回避修正值。

hp=:设置战斗者的HP。

1、控制输入参数不超过 maxhp,同时也不小于0。将输入参数赋给 @hp
2、如果战斗者死亡(@hp为0且不是不死之身),给战斗者附加上所有当作HP为0的状态,相反则去除所有当作HP为0的状态。

sp=:设置战斗者的SP。控制输入参数不超过 maxsp,同时也不小于0。将输入参数赋给 @sp。(这里可以仿照Hp=的方法创造出SP为零同样死亡的情况)

recover_all:全回复。战斗者HP,SP恢复为最大值,同时去除所有状态。

current_action:获取当前的动作,返回战斗者的@current_action属性。@current_action是一个Game_BattleAction的类,后面再说,这里先省略。

make_action_speed:确定动作速度,设定战斗者@current_action属性的speed属性为 战斗者速度 + [0,10+1/4速度] 之间的随机数。

dead?:战斗者战斗不能(死亡)判定,@hp为0且不是不死之身为true,相反为false

exist?:战斗者存在判定,既没有死亡也没有逃跑为true,相反为false。

hp0?:战斗者HP为0判定,@hp为0且没有逃跑为true,相反为false。

inputable?:战斗者可以输入命令判定,没有逃跑且战斗者状态限制为0或1。(0无限制,1不能使用魔法,2普通攻击敌人,3普通攻击同伴,4不行动)

movable?:战斗者可以行动判定,没有逃跑且战斗者状态不是4为true,相反为false。(4不行动为最高限制)

guarding?:战斗者防御中判定,根据@current_action的kind和basic属性判断战斗者是否处于防御状态。

resting?:战斗者休止中判定,判断方法同guarding?。事件中选择让战斗者“什么也不做”就是这种情况,不过没有任何地方调用过这个方法。-__-!

state?:战斗者身上是否存在某个状态判断。

state_full?:战斗者身上是否可以再附加某个状态。

1、如果战斗者身上不存在该状态,返回false
2、如果战斗者身上存在该状态,且无法解除(一般是由Actor身上的装备强制附加的状态)返回true
3、战斗者身上存在该状态且持续回合数等于自然解除的最低回合数返回true,否则返回false。(也就是说如果该回合正好有可能解除状态时,同样的状态是无法附加的,奇妙的设定。@_@)


 

教程的通用说明

本站发布的教程,大多经过一些测试,应该都能够实现相应功能。但不保证所有的教程都是最优化的制作方法。

相关问题,点击发布贴进行讨论。谢谢您的鼓励与支持。


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

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

GMT+8, 2024-11-21 19:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部