本帖最后由 灯笼菜刀王 于 2020-4-2 23:42 编辑 1, 你7楼第一张图不就是在 RPG::Sprite.new 里打开开关的么, 这部分做的没错, 因为本来就是想伤害显示结束的时候来改变图, 而你下面说的, 在第六步再打开开关,虽然也可以做到伤害显示后改变图形, 然而却忽略了一个地方"中毒阶段也是会掉血的, 而它是在第二阶段", 还有之后可能会有的阶段操作(这个等以后再说,笑), 综合考虑, 直接在伤害结束的地方打开开关是最简单的做法 2, damage_pop就是作为一个"信号" 打开的时候就调用 RPG::Sprite.new的伤害显示方法, 同理, 这个开关也是作为信号, 打开的时候就调用图片修改, 借此来让我们更方便的的控制要在什么时候改变图形 3, 这部分没你想像的那么重要, 因为有时候要通过公共事件,战斗事件制作一些效果, 比如通过事件给全体扣血之类的, 剧情需要在事件里更换战斗图什么的, 这个时候因为没有伤害显示所以不会自动打开开关, 所以可能会引起事件效果无效, 所以要记得进行这种操作的时候就手动打开开关 然后事件解释器 也就是 class Interpreter 类, 它的作用就是把事件操作的命令反馈到脚本里, "翻译"成脚本指令执行内容, 因为战斗的时候改战斗图什么的都要记得去开开关, 如果想偷懒, 那就找到这个事件内容, 加上去不就一了百了啦~ #-------------------------------------------------------------------------- # ● 更改角色的图形 #-------------------------------------------------------------------------- def command_322 # 获取角色 actor = $game_actors[@parameters[0]] # 更改图形 if actor != nil actor.set_graphic(@parameters[1], @parameters[2], @parameters[3], @parameters[4]) end # 刷新角色 $game_player.refresh actor.改图开关 = true # 继续 return true end 后话, 其实从深浅度来说, 这部分的内容应该比你之前改的伤害显示坐标,闪烁,视口等要低呢~ 所以我以为你早就掌握了 你会迷茫或许就是你没先经过"努力用事件制作想要的结果"阶段吧, 一开始就对脚本动手, 事件内容并不熟悉所以不会去想到改脚本后对事件的影响~ |
本帖最后由 灯笼菜刀王 于 2020-4-2 19:23 编辑 首先你没考虑"没调用伤害显示的时候,它就无法改战斗图", 而战斗开始的时候是需要改战斗图的, 所以呢, 战斗开始的时候你要先打开它 其次, 你没考虑"全局变量只有一个判定", 而伤害是"每人都有判定", 所以会导致什么结果? 你改了一个人就关闭开关啦, 其他人就没得改了~ 正确做法是, 模仿 damage_pop, 在 game_battler 里新建一个参数,用它来作为改变图形的开关, 然后到 sprite_battler里, 用这个开关来处理你上面的做法, 这样就是各人用各人的开关控制了,(提示下, sprite_battler调用game_battler的实变量在初始化的地方,自己找找, 而这个实变量也是可以用于RPG::Sprite.new里面的,因为sprite_battler就是RPG::Sprite.new ) 最后记得, 在需要改图像且没有调用到伤害显示的时候, 要主动打开它, 比如战斗开始的时候, 在scene battle 的 main 里加一句 $game_party.actors.each {|i| i.改图开关 = true} 如果有用公共事件,战斗事件等改战斗图, 那也一样要打开它, 或者干脆加到事件解释器里, 这个就自己决定啦 |
把完成结果贴下。 super # 战斗者为 nil 的情况下 if @battler == nil self.bitmap = nil loop_animation(nil) return end name = @battler.battler_name if @battler.state?(6) #石化 name += "_石化" elsif @battler.state?(3) #中毒 name += "_中毒" elsif @battler.state?(7) #催眠 name += "_睡眠" end # 文件名和色相与当前情况有差异的情况下 if @battler.is_a?(Game_Enemy) if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue # 获取、设置位图 @battler_name = @battler.battler_name @battler_hue = @battler.battler_hue self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue) @width = bitmap.width @height = bitmap.height self.ox = @width / 2 self.oy = @height # 如果是战斗不能或者是隐藏状态就把透明度设置成 0 if @battler.dead? or @battler.hidden self.opacity = 0 end end end if @battler.is_a?(Game_Actor) and (@battler.damage == nil or @battler.damage_pop) if name != @battler_name or @battler.battler_hue != @battler_hue # 获取、设置位图 @battler_name = name @battler_hue = @battler.battler_hue self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue) @width = bitmap.width @height = bitmap.height self.ox = @width / 2 self.oy = @height # 如果是战斗不能或者是隐藏状态就把透明度设置成 0 if @battler.dead? or @battler.hidden self.opacity = 0 end end end # 动画 ID 与当前的情况有差异的情况下 if @battler.damage == nil and @battler.state_animation_id != @state_animation_id @state_animation_id = @battler.state_animation_id if @battler.is_a?(Game_Enemy) loop_animation($data_animations[@state_animation_id]) end end |
if @battler.is_a?(Game_Actor) 很常用的.. |
3楼说的很详细,这里做一点小补充 给所有人准备异常状态战斗图未免过于麻烦 但是发现附加状态的脚本是在Game_Battler里,并且目前没想到什么好方法来在那里判断被附加状态的人的类型 但是可以在战斗图的文件名上做文章…… 简而言之,就是在更改战斗图时判断战斗图文件名是否带有"待机"这俩字 if @battler_name.include? "待机" 把这个判定套在更换战斗图的脚本外面就可以了 没测试过……233 |
做法和那些防御,胜利什么的一样, 根据不同的判断来替换角色图片 图片相关当然要去找 Sprite类, 而战斗者就是battler, 所以要到 Sprite_Battler 里修改 update里可以找到这句 # 文件名和色相与当前情况有差异的情况下 if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue # 获取、设置位图 @battler_name = @battler.battler_name @battler_hue = @battler.battler_hue self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue) @width = bitmap.width @height = bitmap.height self.ox = @width / 2 self.oy = @height # 如果是战斗不能或者是隐藏状态就把透明度设置成 0 if @battler.dead? or @battler.hidden self.opacity = 0 end end 很显然,这里就是改战斗图的地方了, 然后只要这里加上判断, 让它能按状态自己改战斗图, 目标就达成了 栗子: name = @battler.battler_name if @battler.state?(2) #中毒 name += "_毒" elsif @battler.state?(3) #石化 name += "_石化" elsif @battler.state?(4) #催眠 name += "_催眠" end # 文件名和色相与当前情况有差异的情况下 if name != @battler_name or @battler.battler_hue != @battler_hue # 获取、设置位图 @battler_name = name @battler_hue = @battler.battler_hue self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue) @width = bitmap.width @height = bitmap.height self.ox = @width / 2 self.oy = @height # 如果是战斗不能或者是隐藏状态就把透明度设置成 0 if @battler.dead? or @battler.hidden self.opacity = 0 end end 这样, 中毒就会把战斗图改成 战斗图名字_毒.png 的图片了(图片自己备好) 不过, battler是"敌我双方", 所以说, 你也要给所有敌人都同样准备对应的"异常状态战斗图" |
参与人数 2 | 星屑 +100 | 赞 +1 | 收起 理由 |
---|---|---|---|
miantouchi | + 1 | 认可答案 | |
RyanBern | + 100 | 认可答案 |
你应该找刷新战斗图的脚本才对.. |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-26 13:19
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.