赞 | 4 |
VIP | 211 |
好人卡 | 175 |
积分 | 7 |
经验 | 48096 |
最后登录 | 2014-1-9 |
在线时间 | 1327 小时 |
Lv2.观梦者 (?????)
- 梦石
- 0
- 星屑
- 728
- 在线时间
- 1327 小时
- 注册时间
- 2011-7-18
- 帖子
- 3184
|
2楼
楼主 |
发表于 2011-10-28 04:01:56
|
只看该作者
本帖最后由 各种压力的猫君 于 2011-10-28 05:01 编辑
【开始教学 {:nm_4:} 】
首先从分析上面的问题开始:不是啦 是增加状态这个选项 可以看自己的攻击力啊 状态啊 装备啊什么的
OK,我们首先去Scene_Battle看看。
欸?分割了4个定义?!简单的都没学会我怎么可能学会分割定义的脚本啊!
有上面这种想法的立刻给我去墙角罚站{:nm_1:}
所谓“分割定义”,无非是这个脚本太长了,写在一页里不方便阅读和整理才分成多个的。
OK我们开始实战!
Scene_Battle 1 25-34行:- # 生成角色命令窗口
- s1 = $data_system.words.attack
- s2 = $data_system.words.skill
- s3 = $data_system.words.guard
- s4 = $data_system.words.item
- @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
- @actor_command_window.y = 160
- @actor_command_window.back_opacity = 160
- @actor_command_window.active = false
- @actor_command_window.visible = false
复制代码 仿照原有的格式,加上状态项:
在第29行下面添加一行:并修改原第30行:- @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
复制代码 OK 我们保存一下工程,进战斗测试看效果:
啊咧……超出去了 {:nm_7:}
我们还需要把这个指令窗口向上挪动,修改y坐标。
脚本32行:- @actor_command_window.y = 160
复制代码 我们要修改这个160?当然这样可以。不过我们这里用另外一种方式:- @actor_command_window.y = 160 - 32
复制代码 直接计算,脚本是多么方便啊 {:nm_4:}
有位同学问:32这个数据是如何知道的呢?
看脚本31行:- @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
复制代码 这里提到了Window_Command,于是我们再到Window_Command脚本去找找:
Window_Command 14-15行- # 由命令的个数计算出窗口的高
- super(0, 0, width, commands.size * 32 + 32)
复制代码 看到*32了吧~
那位同学又问了:后面为什么还要+32呢?(十万个为什么啊你{:nm_1:})
打开帮助文档—RPG MAKER XP—素材规格—窗口皮肤说明
B
窗口的边框及箭头。四角的 16×16 边框照这样显示,剩下的边框(边框的一部分)在窗口中按 16 像素的设计形状连接。箭头则作为窗口内容滚动的图标使用。
上下边框16×2=32
好吧有的没的扯完了回到脚本的修改(别忘了保存一下,时刻保存好习惯{:nm_4:})
现在我们改完了窗口的坐标,但是这项还是不可用的呢。我们要给他加上跳转到状态的功能:
Scene_Battle 3 106-155行- #--------------------------------------------------------------------------
- # ● 刷新画面 (角色命令回合 : 基本命令)
- #--------------------------------------------------------------------------
- def update_phase3_basic_command
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 转向前一个角色的指令输入
- phase3_prior_actor
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 角色指令窗口光标位置分之
- case @actor_command_window.index
- when 0 # 攻击
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 设置行动
- @active_battler.current_action.kind = 0
- @active_battler.current_action.basic = 0
- # 开始选择敌人
- start_enemy_select
- when 1 # 特技
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 设置行动
- @active_battler.current_action.kind = 1
- # 开始选择特技
- start_skill_select
- when 2 # 防御
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 设置行动
- @active_battler.current_action.kind = 0
- @active_battler.current_action.basic = 1
- # 转向下一位角色的指令输入
- phase3_next_actor
- when 3 # 物品
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 设置行动
- @active_battler.current_action.kind = 2
- # 开始选择物品
- start_item_select
- end
- return
- end
- end
复制代码 参考已有的格式,在倒数第3个end上面加上:- when 4 # 状态
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 打开状态窗口
- open_status_window
复制代码 如果现在测试绝对会报错退出,因为我们这里调用了open_status_window这个方法,
但是还没有对这个方法进行定义。接下来我们对这个方法进行定义,请看下一层楼。 |
|