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

Project1

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

[已经解决] 求怎样在战斗画面的文字区中显示属性的修正效果?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2010-7-1
帖子
31
跳转到指定楼层
1
发表于 2010-7-5 09:49:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我设想的是攻击时先出现“会心一击”字样,再出现属性效果,然后再是伤害。
比如甲打乙,如果属性修正是400,显示字样"对乙效果极端出众!"
200= "对乙效果很明显!"
100= "对乙正常效果。"
50= "对乙效果很小……"
25或以下= "对乙效果极端不利……"
0= "对乙无效的属性!"
(PS:我这里的属性规定是A400 B200 C100 D50 E25 F0)
求解!

点评

请您在48小时内对此帖做出回应,否则将由版主结贴。  发表于 2010-7-14 00:58

Lv1.梦旅人

梦石
0
星屑
50
在线时间
416 小时
注册时间
2006-10-21
帖子
1245
2
发表于 2010-7-5 11:49:27 | 只看该作者
本帖最后由 wangswz 于 2010-7-5 12:02 编辑

Scene_Battle display_hp_damage中无法调用
$game_battler.elements_max_rate(obj.element_set)嘛?
求高人解答
下面直接复制了函数 不会调用game里的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
416 小时
注册时间
2006-10-21
帖子
1245
3
发表于 2010-7-5 12:01:48 | 只看该作者
本帖最后由 wangswz 于 2010-7-5 13:23 编辑

求高人出现。。
完全不懂game_Battle里关于属性修正的那段
究竟是如何让角色和敌人的属性有效度和技能联系起来的啊?


有大错 正在返工


大概是这样的
Scene_Battle
1045
  1.   #--------------------------------------------------------------------------
  2.   # ● 显示体力伤害
  3.   #     target : 目标
  4.   #     obj    : 技能或物品
  5.   #--------------------------------------------------------------------------
  6.   def display_hp_damage(target, obj = nil)
  7.     if target.hp_damage == 0                # 无伤害
  8.       return if obj != nil and obj.damage_to_mp
  9.       return if obj != nil and obj.base_damage == 0
  10.       fmt = target.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
  11.       text = sprintf(fmt, target.name)
  12.     elsif target.absorbed                   # 吸收
  13.       fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  14.       text = sprintf(fmt, target.name, Vocab::hp, target.hp_damage)
  15.     elsif target.hp_damage > 0              # 伤害
  16.       if target.actor?
  17.         text = sprintf(Vocab::ActorDamage, target.name, target.hp_damage)
  18.         Sound.play_actor_damage
  19.         $game_troop.screen.start_shake(5, 5, 10)
  20.       else
  21.         text = sprintf(Vocab::EnemyDamage, target.name, target.hp_damage)
  22.         Sound.play_enemy_damage
  23.         target.blink = true
  24.       end
  25.       if obj != nil
  26.         case elements_max_rate(obj.element_set)
  27.         when 100..200
  28.           text2 = sprintf(Vocab::ShuXingA)
  29.           @message_window.add_instant_text(text2)
  30.           wait(10)
  31.         end
  32.       end
  33.     else                                    # 回复
  34.       fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  35.       text = sprintf(fmt, target.name, Vocab::hp, -target.hp_damage)
  36.       Sound.play_recovery
  37.     end
  38.     @message_window.add_instant_text(text)
  39.     wait(30)
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 获取最大属性调整量
  43.   #     element_set : 属性列表
  44.   #    返回效果最大的属性
  45.   #--------------------------------------------------------------------------
  46.   def elements_max_rate(element_set)
  47.     return 100 if element_set.empty?                # 判断是否有属性列表
  48.     rate_list = []
  49.     for i in element_set
  50.       rate_list.push(element_rate(i))
  51.     end
  52.     return rate_list.max
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 获取属性修正值
  56.   #     element_id : 属性ID
  57.   #--------------------------------------------------------------------------
  58.   def element_rate(element_id)
  59.     return 100
  60.   end
复制代码
注意
       when 100..200
          text2 = sprintf(Vocab::ShuXingA)
          @message_window.add_instant_text(text2)
          wait(10)
如果效果在100%~200%之间。。返回shuxingA字符串
然后
Vocab
里 插入
  1.   # 属性有效度显示
  2.   ShuXingA        = "效果拔群!"
复制代码
我新建工程 无误 如果有错。。。。。
也许有修改了但漏贴的地方 sorry

评分

参与人数 1星屑 +400 收起 理由
木葬枫 + 400 鼓励参与讨论。

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2010-7-1
帖子
31
4
 楼主| 发表于 2010-7-5 15:47:24 | 只看该作者
谢谢了,已经解决了。
但是我还有疑问……
我重新定义一个新 def ,但是文字无法显示,为什么2个def并到体力伤害里就可以?
……
你的那个代码显示的都是100的效果,所以我又用全局变量代换了。

点评

你新定义的过程是不是没有调用= =  发表于 2010-7-6 09:43
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2010-7-1
帖子
31
5
 楼主| 发表于 2010-7-5 15:49:49 | 只看该作者
我直接省去了对象,sprintf是打出新定义的对象吧。
还有怎样配上不同响度和音调的声音?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
416 小时
注册时间
2006-10-21
帖子
1245
6
发表于 2010-7-5 16:26:04 | 只看该作者
上个脚本吧。。。让我看看你的解决办法。。。拜托了。。
那个def的问题 。。没看懂
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
416 小时
注册时间
2006-10-21
帖子
1245
7
发表于 2010-7-6 08:12:59 | 只看该作者
没人理我  自顶。。 变成我的求助贴了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

万物创造者

梦石
0
星屑
54
在线时间
352 小时
注册时间
2008-2-15
帖子
2432
8
发表于 2010-7-6 09:41:23 | 只看该作者
Scene_Battle display_hp_damage中无法调用
$game_battler.elements_max_rate(obj.element_set)嘛?
求高人 ...
wangswz 发表于 2010-7-5 11:49


根本没有$game_battler这玩意儿吧……
Game_Battler是Game_Actor与Game_Enemy的超级类,所以要用也只有$game_actors和$game_troop.members。这里直接用那个target参数就好
case target.elements_max_rate(obj.element_set)

点评

嗯,这里的target是由@active_battler.action.make_targets数组里的元素产生的  发表于 2010-7-6 10:33
这里就是根据target的类型返回Actor或Enemy的elements_max_rate函数吗?  发表于 2010-7-6 09:47
跪谢  发表于 2010-7-6 09:46

评分

参与人数 1星屑 +300 收起 理由
木葬枫 + 300 鼓励参与讨论。

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2010-7-1
帖子
31
9
 楼主| 发表于 2010-7-6 17:48:07 | 只看该作者
脚本大致如下:
def elementeffect(target, obj = nil)
  if target.elements_max_rate(obj.element_set) == 400
    text = "------"
   

后面的省略,无语法错误。

  

end
  @message_window.add_instant_text(text)
end



  
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2010-7-1
帖子
31
10
 楼主| 发表于 2010-7-6 17:49:55 | 只看该作者
#--------------------------------------------------------------------------
  # ● 显示行动结果
  #     target : 目标
  #     obj    : 技能或物品
  #--------------------------------------------------------------------------
  def display_action_effects(target, obj = nil)
    unless target.skipped
      line_number = @message_window.line_number
      wait(5)
      display_critical(target, obj)

#添加部分:
      elementeffect(target, obj)

      display_damage(target, obj)
      display_state_changes(target, obj)
      if line_number == @message_window.line_number
        display_failure(target, obj) unless target.states_active?
      end
      if line_number != @message_window.line_number
        wait(30)
      end
      @message_window.back_to(line_number)
    end
  end

评分

参与人数 1星屑 +100 收起 理由
木葬枫 + 100 鼓励参与讨论。

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-7 07:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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