Project1

标题: 如何判断使用的是否是特技 [打印本页]

作者: 果冻叮当猫    时间: 2008-8-30 04:15
标题: 如何判断使用的是否是特技
就是用脚本判断使用的攻击是否是特技
[LINE]1,#dddddd[/LINE]此贴于 2008-9-1 12:42:32 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2008-9-2 11:15:28 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]此贴于 2008-9-4 12:21:42 被版主darkten提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]版务信息:版主帮忙结贴~
作者: dbshy    时间: 2008-8-30 04:18
@active_battler.current_action.kind
when 0  # 基本
    when 1  # 特技
     when 2  # 物品
[LINE]1,#dddddd[/LINE]系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
作者: 果冻叮当猫    时间: 2008-8-30 04:32
以下引用dbshy于2008-8-29 20:18:28的发言:

@active_battler.current_action.kind
when 0  # 基本
   when 1  # 特技
    when 2  # 物品

可如果我要在另外一个类里面判断应该怎么做?
作者: dbshy    时间: 2008-8-30 04:54
@active_battler改成$active_battler

作者: 果冻叮当猫    时间: 2008-8-30 20:17
好像不行。我是要用来判断会心一击是否是特技,如果不是就播放出音效!
我脚本给你看看

module RPG
#--------------------------------------------------------------------------
# ● 常量设定
#--------------------------------------------------------------------------
# 是否显示总伤害
SHOW_TOTAL_DAMAGE = true
# 角色受攻击时是否跳一下
BATTLER_JUMP = true
# 伤害美化字符串文件夹名(放在Pictures文件夹中的子文件夹)
STRING_DOCUMENTS = "String/"
# 是否使用伤害美化效果
USE_DAMAGE = true
# 会心一击音效
CRITICAL_SE="Audio/SE/1267.wav"

class Sprite < ::Sprite
   #==========================================
   # 修改说明:
   # @flash_shake用来制作挨打时候跳跃
   # @_damage    用来记录每次打击之后弹出数字
   # @_total_damage 记录总伤害
   # @_total_damage_duration 总伤害持续帧
   #==========================================
   #alias 66RPG_rainbow_initialize : initialize
   def initialize(viewport = nil)
     #66RPG_rainbow_initialize(viewport)
     super(viewport)
     @_whiten_duration = 0
     @_appear_duration = 0
     @_escape_duration = 0
     @_collapse_duration = 0
     @_damage_duration = 0
     @_animation_duration = 0
     @_blink = false
     # 挨打时候跳跃
     @flash_shake = 0
     # 伤害记录数组
     @_damage = []
     # 总伤害数字
     @_total_damage = 0
     # 总伤害持续帧
     @_total_damage_duration = 0
     #.........................................................................
     #记录已经发生的伤害的变量
     @p_dam=0
     @hits=0
     ############ #小改动
     #记录前一次攻击次数
     @temp_hits=0
     #判断是否为最后一次攻击
     @last_hits=0
     ############
     #.........................................................................
   end
   #--------------------------------------------------------------------------
   #美化的伤害处理
   #--------------------------------------------------------------------------
    def damage(value, critical)
      
if USE_DAMAGE == true then
  
      # 释放伤害,效果是伤害数字快速消失,觉得不如不消失好看......
      #dispose_damage
      #清除hit数
      dispose_hit
      # 如果伤害值是数值
      if value.is_a?(Numeric)
        # 绝对值转为字符串
        damage_string = value.abs.to_s
      else
        # 转为字符串
        damage_string = value.to_s
      end
      # 初始化位图
      bitmap = Bitmap.new(162, 64)
      bitmap.font.name = ["华文行楷","黑体", "宋体"]
      bitmap.font.size = 32
      # 伤害值是数值的情况下
      if value.is_a?(Numeric)
        # 分割伤害值字符串
        damage_array = damage_string.scan(/./)
        damage_x = 81 - damage_string.size * 9
        # 伤害值为负的情况下
        if value < 0
          # 调用回复数字表
          rect_y = 32
        else
          # 调用伤害数字表
          rect_y = 0
        end
        # 循环伤害值字符串
        for char in damage_array
          number = char.to_i
          # 显示伤害数字
          bitmap.blt(damage_x, 32, RPG::Cache.picture(STRING_DOCUMENTS + "Damage"),#"Damagenew"),
          Rect.new(number * 18, rect_y, 18, 32))
          # 后移一位
          damage_x += 18
        end
      # 伤害值不是数值的情况
      else
        # 如果伤害值不是 Miss
        unless value == "Miss"
          # 系统默认描画字符串
          bitmap.font.color.set(0, 0, 0)
          bitmap.draw_text(-1, 27, 162, 36, damage_string, 1)
          bitmap.draw_text(+1, 27, 162, 36, damage_string, 1)
          bitmap.draw_text(-1, 29, 162, 36, damage_string, 1)
          bitmap.draw_text(+1, 29, 162, 36, damage_string, 1)
          bitmap.font.color.set(255, 255, 255)
          bitmap.draw_text(0, 28, 162, 36, damage_string, 1)
        # Miss 的情况下
        else
          # 显示未击中图画
          bitmap.blt(36, 28, RPG::Cache.picture(STRING_DOCUMENTS + "Damage"), Rect.new(90, 64, 90, 32))
        end
      end
      # 会心一击标志打开的情况
      if critical
        #会心一击伤害效果
###########################################################
        Audio.se_play(CRITICAL_SE,90,100) if CRITICAL_SE != ""
        $game_screen.start_flash(Color.new(255,255,255,255),5)
###########################################################

        # 显示会心一击图画
        bitmap.blt(36, 0, RPG::Cache.picture(STRING_DOCUMENTS + "Damage"), Rect.new(0, 64, 90, 32))
      end
      
else
      
     #.........................................................................
     #清除hit数
     dispose_hit
     #.........................................................................
     if value.is_a?(Numeric)
       damage_string = value.abs.to_s
     else
       damage_string = value.to_s
     end
     bitmap = Bitmap.new(160, 48)
     bitmap.font.name = "Arial Black"
     bitmap.font.size = 32
     bitmap.font.color.set(0, 0, 0)
     bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
     bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
     bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
     bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
     #=======================================
     # 修改:颜色
     #=======================================
     if value.is_a?(Numeric) and value < 0
       bitmap.font.color.set(176, 255, 144)
     else
       bitmap.font.color.set(255, 55, 55)
     end
     bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
     if critical
       #会心一击伤害效果
###########################################################
       Audio.se_play(CRITICAL_SE,90,100) if CRITICAL_SE != ""
       $game_screen.start_flash(Color.new(255,255,255,255),5)
###########################################################

       bitmap.font.size = 20
       bitmap.font.color.set(0, 0, 0)
       bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
       bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
       bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
       bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
       bitmap.font.color.set(255, 255, 255)
       bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
     end
     
end
   
     # 伤害值定位     
     @_damage_sprite = ::Sprite.new#(self.viewport)
     @_damage_sprite.bitmap = bitmap
     @_damage_sprite.ox = 80
     @_damage_sprite.oy = 20
     @_damage_sprite.x = self.x
     @_damage_sprite.y = self.y - self.oy / 2
     @_damage_sprite.z = 3000
     @_damage_duration = 40
     #=======================================
     # 修改:推入新的伤害
     #=======================================
     @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
     # 总伤害处理
     make_total_damage(value)
     
end

红色部分就是要判断的(特技我加入了可以使用会心一击)
作者: 果冻叮当猫    时间: 2008-8-30 20:19
忘了这个是在二刀流彩虹神剑中提取出来修改的
http://rpg.blue/web/htm/news732.htm
作者: dbshy    时间: 2008-8-30 22:24
两个方法
第一,定义damage(value, critical,SKILL_CRI)
用SKILL_CRI来判断

第二,根本不用在这判断和显示闪烁
在SCENE_BATTLE里即可
作者: ★_茄孓    时间: 2008-8-30 22:31

在SCENE_BATTLE里即可


里面有@active_battler.xx_xxx.kind (0,1,2···)
xx_xxx是什么忘记了 ●TZ

作者: lhbadsl    时间: 2008-9-2 02:30
楼主要在精灵中控制过程吧(通俗点就是讲把战斗系统写在彩虹神剑中)。。解决方法为在Game_Battler中定义一个独立变量,比如action_actor并赋值为-1,在scene_battle中的这些句子中

  1.     for target in @target_battlers
  2.       target.action_actor = 2
  3.       target.skill_effect(@active_battler, @skill)
  4.   end
复制代码

注意target.action_actor = 2这句,target.skill_effect(@active_battler, @skill)
这个是技能的入口意思就是当被动战斗者的action_actor变量为2的时候就是受到技能攻击。还有其他的入口,比如target.attack_effect(@active_battler)这是普攻,按照上面用target.action_actor = 1就是当普攻是被动战斗者的action_actor为1,其他的还有物品,防御,逃跑等等入口也是按照这个写,附上不同的值,在精灵中就可以用被动战斗者的这个独立变量的值判断现在正处于什么过程中了,当然这只是一个解决的办法,还有不同的做法可以达到同样效果。不过别忘了在scene_battle的主步骤4步骤6就是刷新前面把这个变量重新赋值为-1就可以了,具体实现办法可以参考这个脚本
http://rpg.blue/viewthread.php?t ... D9%2D1+18%3A40%3A56




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1