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

Project1

 找回密码
 注册会员
搜索
查看: 2043|回复: 13
打印 上一主题 下一主题

[已经解决] 战斗危机时如何变化战斗图

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
76 小时
注册时间
2016-2-12
帖子
18
跳转到指定楼层
1
发表于 2016-3-5 20:50:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
想在角色战斗时,当前血量降低到30%以下时,数据库的战斗图变更成另一张,回复血量超过30%就变回通常战斗图,
不知道脚本那边应该如何实现?QAQ

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

2
发表于 2016-3-5 22:11:33 | 只看该作者
  1. #==============================================================================
  2. # ■ Sprite_Battler
  3. #==============================================================================

  4. class Sprite_Battler < RPG::Sprite
  5.   #--------------------------------------------------------------------------
  6.   # ● 初始化对像
  7.   #--------------------------------------------------------------------------
  8.   alias sn_160305_init initialize
  9.   def initialize(viewport, battler = nil)
  10.     sn_160305_init(viewport, battler)
  11.     @crisis = false
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 设置战斗图(危机时变化)
  15.   #--------------------------------------------------------------------------
  16.   def get_battler_name
  17.     return @battler.battler_name unless @battler.is_a?(Game_Actor)
  18.     return @battler.battler_name + (@crisis ? "_Crisis" : "")
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 刷新画面
  22.   #--------------------------------------------------------------------------
  23.   def update
  24.     super
  25.     # 战斗者为 nil 的情况下
  26.     if @battler == nil
  27.       self.bitmap = nil
  28.       loop_animation(nil)
  29.       return
  30.     end
  31.     # 危机标志刷新
  32.     @crisis = @battler.hp <= @battler.maxhp / 3 if @battler.is_a?(Game_Actor)
  33.     # 文件名和色相与当前情况有差异的情况下(文件名变更)
  34.     if get_battler_name != @battler_name or
  35.        @battler.battler_hue != @battler_hue
  36.       # 获取、设置位图
  37.       @battler_name = get_battler_name
  38.       @battler_hue = @battler.battler_hue
  39.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  40.       @width = bitmap.width
  41.       @height = bitmap.height
  42.       self.ox = @width / 2
  43.       self.oy = @height
  44.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  45.       if @battler.dead? or @battler.hidden
  46.         self.opacity = 0
  47.       end
  48.     end
  49.     # 动画 ID 与当前的情况有差异的情况下
  50.     if @battler.damage == nil and
  51.        @battler.state_animation_id != @state_animation_id
  52.       @state_animation_id = @battler.state_animation_id
  53.       loop_animation($data_animations[@state_animation_id])
  54.     end
  55.     # 应该被显示的角色的情况下
  56.     if @battler.is_a?(Game_Actor) and @battler_visible
  57.       # 不是主状态的时候稍稍降低点透明度
  58.       if $game_temp.battle_main_phase
  59.         self.opacity += 3 if self.opacity < 255
  60.       else
  61.         self.opacity -= 3 if self.opacity > 207
  62.       end
  63.     end
  64.     # 明灭
  65.     if @battler.blink
  66.       blink_on
  67.     else
  68.       blink_off
  69.     end
  70.     # 不可见的情况下
  71.     unless @battler_visible
  72.       # 出现
  73.       if not @battler.hidden and not @battler.dead? and
  74.          (@battler.damage == nil or @battler.damage_pop)
  75.         appear
  76.         @battler_visible = true
  77.       end
  78.     end
  79.     # 可见的情况下
  80.     if @battler_visible
  81.       # 逃跑
  82.       if @battler.hidden
  83.         $game_system.se_play($data_system.escape_se)
  84.         escape
  85.         @battler_visible = false
  86.       end
  87.       # 白色闪烁
  88.       if @battler.white_flash
  89.         whiten
  90.         @battler.white_flash = false
  91.       end
  92.       # 动画
  93.       if @battler.animation_id != 0
  94.         animation = $data_animations[@battler.animation_id]
  95.         animation(animation, @battler.animation_hit)
  96.         @battler.animation_id = 0
  97.       end
  98.       # 伤害
  99.       if @battler.damage_pop
  100.         damage(@battler.damage, @battler.critical)
  101.         @battler.damage = nil
  102.         @battler.critical = false
  103.         @battler.damage_pop = false
  104.       end
  105.       # korapusu
  106.       if @battler.damage == nil and @battler.dead?
  107.         if @battler.is_a?(Game_Enemy)
  108.           $game_system.se_play($data_system.enemy_collapse_se)
  109.         else
  110.           $game_system.se_play($data_system.actor_collapse_se)
  111.         end
  112.         collapse
  113.         @battler_visible = false
  114.       end
  115.     end
  116.     # 设置活动块的坐标
  117.     self.x = @battler.screen_x
  118.     self.y = @battler.screen_y
  119.     self.z = @battler.screen_z
  120.   end
  121. end
复制代码
放在【Sprite_Battler】下面【Main】上面任何地方,
因为默认代码结构问题,和其他战斗系统冲突可能存在、
危机的时候战斗图会变成名字为“原战斗图名_Crisis”。
(未测试……  

点评

已经解决了,真的十分感谢大神的帮忙!  发表于 2016-3-6 00:43
建议黑掉Game_Battler里面的battler_name和battler_hue,不要在这里黑。  发表于 2016-3-5 23:58

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
76 小时
注册时间
2016-2-12
帖子
18
3
 楼主| 发表于 2016-3-5 23:08:06 | 只看该作者
本帖最后由 阿短 于 2016-3-5 23:30 编辑
cinderelmini 发表于 2016-3-5 22:11
放在【Sprite_Battler】下面【Main】上面任何地方,
因为默认代码结构问题,和其他战斗系统冲突可能存在、
...


谢谢大神!但是我放进去后危机时人物战斗图还是没有变化,是我图片命名出问题吗?
图像命名比如原战斗图为   1.png,位置在\Graphics\Battlers  夹里面
危机战斗图应同样在\Graphics\Battlers里面的,名字为  1_Crisis.png  吗?



@cinderelmini
会不会是我加入了  去“战斗/逃跑”选项  的代码而冲突了?

RUBY 代码复制
  1. #=======================================================================
  2. # ■ 本脚本来自 [url]www.66rpg.com[/url] 转载和使用时请保留此信息
  3. #-----------------------------------------------------------------------
  4. #   脚本功能:去掉战斗开始时候的 战斗/逃跑 的选择过程.
  5. #             并把逃跑加入到角色命令菜单当中
  6. #   脚本作者:后知后觉  2010-8-11 13:46:59
  7. #   使用方法:直接在 Main 前插入即可
  8. #=======================================================================
  9. class Window_PartyCommand < Window_Selectable
  10.   def visible=(value)
  11.     super(false)
  12.   end
  13.   def active=(value)
  14.     super(false)
  15.   end
  16. end
  17. class Scene_Battle
  18.   alias hzhj_old_start_phase1 start_phase1
  19.   def start_phase1
  20.     class << @actor_command_window
  21.       attr_reader :commands
  22.       def commands=(value)
  23.         @commands = value
  24.         @item_max = @commands.size
  25.         self.height = @item_max * 32 + 32
  26.         self.y = [self.y - 32, 0].max
  27.         self.contents.dispose
  28.         self.contents = Bitmap.new(width - 32, height - 32)
  29.         refresh
  30.       end
  31.     end
  32.     commands = @actor_command_window.commands
  33.     commands.push("撤退")
  34.     @actor_command_window.commands = commands
  35.     unless $game_temp.battle_can_escape
  36.       @actor_command_window.disable_item(commands.size - 1)
  37.     end
  38.     hzhj_old_start_phase1
  39.   end
  40.   alias hzhj_old_start_phase2 start_phase2
  41.   def start_phase2
  42.     hzhj_old_start_phase2
  43.     if @phase == 2
  44.       start_phase3
  45.     end
  46.   end
  47.   alias hzhj_old_update_phase3_basic_command update_phase3_basic_command
  48.   def update_phase3_basic_command
  49.     hzhj_old_update_phase3_basic_command
  50.     if Input.trigger?(13)
  51.       if @actor_command_window.index == @actor_command_window.commands.size - 1
  52.         unless $game_temp.battle_can_escape
  53.           $game_system.se_play($data_system.buzzer_se)
  54.           return
  55.         end
  56.         $game_system.se_play($data_system.decision_se)
  57.         update_phase2_escape
  58.         return
  59.       end
  60.     end
  61.   end
  62. end
  63.  
  64. #=======================================================================
  65. # ■ 本脚本来自 [url]www.66rpg.com[/url] 转载和使用时请保留此信息
  66. #=======================================================================




而原Sprite_Battler我修改的是下面的部分

RUBY 代码复制
  1. # 不是主状态的时候稍稍降低点透明度
  2.       if $game_temp.battle_main_phase
  3.         self.opacity += 3 if self.opacity < 255
  4.       else
  5.         self.opacity -= 3 if self.opacity > 255
  6.       end

点评

@cinderelmini 我知道是什么原因了,搜狗输入法黏贴代码失败,要用英文输入法黏贴代码才生效,我感觉搜狗太坑爹了,实在感谢你的帮忙!  发表于 2016-3-6 00:40
实在不行就整理一下,弄个工程发过来吧~那样比较好处理。  发表于 2016-3-5 23:44
不,这个没关系,全局搜索一下“class Sprite_Battler”看看有多少个。  发表于 2016-3-5 23:36
我在默认工程里测试没问题,估计是和其他Sprite_Battler类冲突了,具体得看工程或者相关代码。  发表于 2016-3-5 23:17
@cinderelmini 是的,没有变化,我再看看、实在不行我上传工程再麻烦您瞧瞧  发表于 2016-3-5 23:15
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1356
在线时间
153 小时
注册时间
2019-5-31
帖子
68
4
发表于 2019-10-11 12:01:05 | 只看该作者
cinderelmini 发表于 2016-3-5 22:11
放在【Sprite_Battler】下面【Main】上面任何地方,
因为默认代码结构问题,和其他战斗系统冲突可能存在、
...

好奇了这个“默认代码结构问题”具体指啥问题,比如会引起哪方面的冲突啊

点评

于是就导致如果用了多个改动了同个方法的脚本的时候,会导致后来的覆盖前面的,产生冲突。  发表于 2019-10-11 20:23
XP默认代码把很多内容都塞到一个方法里,然后要改动这个方法里的某个部分的时候就得整个方法重写,  发表于 2019-10-11 20:22
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-23 13:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表