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

Project1

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

烦请熟rgss的朋友帮看一下

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
197
在线时间
132 小时
注册时间
2008-12-15
帖子
32
跳转到指定楼层
1
发表于 2008-12-20 08:37:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我战斗系统使用齿车之城的角色表情战斗脚本,这个脚本设定了各种战斗状况时角色会更换不同表情(实际上就是更换图片),由于我想如果能在更换图片时发出se(例如被打时放惨叫声),那效果就更好了,可惜不知是否作法会很复杂,我自己不是很懂rgss,因此若加入这个功能太难的话就想放弃,但若是小改就成的话就想做出来了,因此,想请各位看看这个脚本,看是否有可能实现。

脚本如下,我删了部分定义人物的,这部份只是定义各种人物取用的图片,我想和播放se的功能无关。

# バトルフェイスグラフィック(RTAB用) Ver 1.01
# 配布元・サポートURL
# http://members.jcom.home.ne.jp/cogwheel/

#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------
#  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================

class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 顔グラフィック設定
  #--------------------------------------------------------------------------
  def face_select(type)
    # 顔グラフィック名により分岐
    case @face_name
    when "f1" # ファイター 1 の場合
      # アクションタイプにより分岐
      case type
      when 0 # 待機の場合
        return ""
      when 1 # 瀕死の場合
        return "_15"
      when 2 # 防御の場合
        return ""
      when 3 # 暴走の場合
        return "_10"
      when 4 # 混乱の場合
        return "_10"
      when 10 # 攻撃の場合
        return "_5"
      when 11 # 回復の場合
        return "_3"
      when 20 # ダメージの場合
        return "_7"
      when 30 # 勝利の場合
        return "_11"
      when 40 # 呪文詠唱中の場合
        return "_2"
      when 41 # 特技詠唱中の場合
        return "_3"
      end
    end
    return ""
  end
  #--------------------------------------------------------------------------
  # ● 顔グラフィック更新
  #--------------------------------------------------------------------------
  def face_update
    # ディレイが掛かっている場合
    @face_delay -= 1 if @face_delay > 0
    # ダメージを受けた場合
    if @hp != @battler.hp
      # フェイス攻撃表示
      if @hp > @battler.hp
        @face_delay = 20
      end
      # HP を反映
      @hp = @battler.hp
      return
    end
    # アクション中の場合
    if @battler.phase > 1
      # フェイス攻撃表示
      if @face_type != 10
        # フェイスタイプを攻撃に設定
        @face_type = 10
        # アクションの種別で分岐
        case @battler.current_action.kind
        when 0  # 基本
          # 攻撃の場合
          if @battler.current_action.basic == 0
            self.bitmap = RPG::Cache.face(@face_name + face_select(10))
          end
        when 1..2  # スキル、アイテム
          # スコープの取得
          if @battler.current_action.kind == 1
            scope = $data_skills[@battler.current_action.skill_id].scope
          else
            scope = $data_items[@battler.current_action.item_id].scope
          end
          # 攻撃の場合
          if scope < 3
            self.bitmap = RPG::Cache.face(@face_name + face_select(10))
          # 回復の場合
          else
            self.bitmap = RPG::Cache.face(@face_name + face_select(11))
          end
        end
      end
      return
    end
    # 戦闘に勝利した場合
    if $scene.phase == 5
      if @face_type != 30
        # フェイスタイプを勝利に設定
        @face_type = 30
        self.bitmap = RPG::Cache.face(@face_name + face_select(30))
      end
      return
    end
    # 詠唱中の場合
    if @battler.rtp > 0
      if @face_type != 40
        # フェイスタイプを詠唱に設定
        @face_type = 40
        # 呪文詠唱の場合
        if $data_skills[@battler.current_action.skill_id].int_f > 0
          self.bitmap = RPG::Cache.face(@face_name + face_select(40))
        # スキル詠唱の場合
        else
          self.bitmap = RPG::Cache.face(@face_name + face_select(41))
        end
      end
      return
    end
    # ダメージを受けている場合
    if @face_delay > 0
      if @face_type != 20
        # フェイスタイプをダメージに設定
        @face_type = 20
        self.bitmap = RPG::Cache.face(@face_name + face_select(20))
        end
      return
    end
    # 防御中な
    if @battler.guarding?
      if @face_type != 2
        @face_type = 2
        self.bitmap = RPG::Cache.face(@face_name + face_select(2))
      end
    # 正常な場合
    elsif @hp > @battler.maxhp/4 and @battler.movable? and @battler.inputable?
      if @face_type != 0
        @face_type = 0
        self.bitmap = RPG::Cache.face(@face_name + face_select(0))
      end
    # 瀕死の場合
    elsif @battler.inputable?
      if @face_type != 1
        @face_type = 1
        self.bitmap = RPG::Cache.face(@face_name + face_select(1))
      end
    # 暴走の場合
    else
      # 暴走の場合
      if @battler.restriction == 3
        if @face_type != 3
          @face_type = 3
          self.bitmap = RPG::Cache.face(@face_name + face_select(3))
        end
      # 混乱の場合
      else
        if @face_type != 4
          @face_type = 4
          self.bitmap = RPG::Cache.face(@face_name + face_select(4))
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    # バトラーが nil の場合
    if @battler == nil
      self.bitmap = nil
      loop_animation(nil)
      return
    end
    # ファイル名か色相が現在のものと異なる場合
    if @battler.battler_name != @battler_name or
       @battler.battler_hue != @battler_hue
      # ビットマップを取得、設定
      @battler_name = @battler.battler_name
      @battler_hue = @battler.battler_hue
      # フェイスグラフィックファイルが存在する場合
      if @battler.is_a?(Game_Actor)
        # キャラクターグラフィック名より、フェイスグラフィック名の検索
        @face_name =  RPG::Face.seek(@battler.character_name)
        @face_name.sub!(/_\d+$/) { "" }
        @face_type = 0
        @face_delay = 0
        @hp = @battler.hp
        begin
          # フェイスグラフィックを描画
          self.bitmap = RPG::Cache.face(@face_name)
        # フェイスグラフィックファイルが存在しない場合
        rescue
          @face_name = ""
          self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
        end
      # エネミーキャラの場合
      else
        @face_name = ""
        self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
      end
      @width = bitmap.width
      @height = bitmap.height
      self.ox = @width / 2
      self.oy = @height + 16
      if @battler.is_a?(Game_Enemy)
        @battler.height = @height
      end
      # 戦闘不能または隠れ状態なら不透明度を 0 にする
      if @battler.dead? or @battler.hidden
        self.opacity = 0
      end
      @hp = @battler.hp
    end
    # 顔グラフィックの更新作業
    face_update if @face_name != ""
    # アニメーション ID が現在のものと異なる場合
    if @battler.state_animation_id != @state_animation_id
      @state_animation_id = @battler.state_animation_id
      loop_animation($data_animations[@state_animation_id])
    end
    # 表示されるべきアクターの場合
    if @battler.is_a?(Game_Actor) and @battler_visible
      # メインフェーズでないときは不透明度をやや下げる
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 207
      end
    end
    # 明滅
    if @battler.blink
      blink_on
    else
      blink_off
    end
    # 不可視の場合
    unless @battler_visible
      # 出現
      if not @battler.hidden and not @battler.dead? and
         (@battler.damage.size < 2 or @battler.damage_pop.size < 2)
        appear
        @battler_visible = true
      end
    end
    # ダメージ
    for battler in @battler.damage_pop
      if battler[0].class == Array
        if battler[0][1] >= 0
          $scene.skill_se
        else
          $scene.levelup_se
        end
        damage(@battler.damage[battler[0]], false, 2)
      else
        damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
      end
      if @battler.damage_sp.include?(battler[0])
        damage(@battler.damage_sp[battler[0]],
                @battler.critical[battler[0]], 1)
        @battler.damage_sp.delete(battler[0])
      end
      @battler.damage_pop.delete(battler[0])
      @battler.damage.delete(battler[0])
      @battler.critical.delete(battler[0])
    end
    # 可視の場合
    if @battler_visible
      # 逃走
      if @battler.hidden
        $game_system.se_play($data_system.escape_se)
        escape
        @battler_visible = false
      end
      # 白フラッシュ
      if @battler.white_flash
        whiten
        @battler.white_flash = false
      end
      # アニメーション
      unless @battler.animation.empty?
        for animation in @battler.animation.reverse
          animation($data_animations[animation[0]], animation[1])
          @battler.animation.delete(animation)
        end
      end
      # コラプス
      if @battler.damage.empty? and @battler.dead?
        if $scene.dead_ok?(@battler)
          if @battler.is_a?(Game_Enemy)
            $game_system.se_play($data_system.enemy_collapse_se)
          else
            $game_system.se_play($data_system.actor_collapse_se)
          end
          collapse
          @battler_visible = false
        end
      end
    end
    # スプライトの座標を設定
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
    if @battler.is_a?(Game_Enemy)
      self.zoom_x = @battler.real_zoom * @battler.zoom
      self.zoom_y = @battler.real_zoom * @battler.zoom
    end
  end
end

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :phase                    # バトルフェーズ
end
头像被屏蔽

Lv1.梦旅人 (禁止发言)

lov Peii 4ever

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-10-28
帖子
423
2
发表于 2008-12-22 12:31:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
197
在线时间
132 小时
注册时间
2008-12-15
帖子
32
3
 楼主| 发表于 2008-12-23 04:05:42 | 只看该作者
感谢,试成功了,这么一来战斗就更丰富了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 10:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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