Project1

标题: 横版战斗动画 逆行九霄 突进+指令投 [打印本页]

作者: 89444640    时间: 2017-11-28 12:01
标题: 横版战斗动画 逆行九霄 突进+指令投
本帖最后由 89444640 于 2017-11-29 10:59 编辑

前情提要
https://rpg.blue/thread-404035-1-1.html
这个我就不做gif预览直接游戏里面整完了。面得浪费不必要的时间。
本来想周末能整出来,结果敌人的配合动作找不到了,于是现画……
从草图到画完整合15天……草图2小时,画像素15天,可见横版动画多费美工,可见认真画与草图的难易度差别多大,不算转身侧踢的和背面待机的几十帧,光这16帧,如果找人画……价格我只能呵呵呵了……根本给不起!!!
最后在游戏动画里面整合动作很高效,不到四十分钟。还包括音效,因为买的音效就是好用,就是用着痛快,就是没版权隐患,就是爽!可惜gif听不到声音。

为了能传附件,不得已压缩了,前面招式说明只留了1帧,想看自己暂定看。
以下是实际运行图像,原始素材就不发了。
(, 下载次数: 261)


光看gif感觉摔的还是不够狠,肯能是没音效造成的。就这样吧……


10楼更新了,用软件做特效增加打击感但是由于太大无法上传的版本,请自行下载观看 XD

作者: 御曹司    时间: 2017-11-28 12:32
好棒的效果啊~
作者: 89444640    时间: 2017-11-28 13:24
本帖最后由 89444640 于 2017-11-28 15:05 编辑
御曹司 发表于 2017-11-28 12:32
好棒的效果啊~

谢谢,可惜这么做太累人,两周一个招式,很多人一个月都可以出个游戏了 - -b
那个,画面震动得用公用事件,但是……我不知道怎么在播放动画中的某帧才能出现画面震荡- -b,确实如果有了震荡打击效果会更加强烈。

咳咳,话痨开始XD
按照格斗游戏的思路来做,确实是效果不错。
我敌人没好好画,而且受创动作不全,表演效果不完美,本来我记得画过一个击退的动作,但是死活找不到了,而且还没有旋转击飞,受创回到初始位置的动作,下蹲受创……所以打起来还是不太灵活。
而且因为敌人没有进攻动作,很多本来能画出来的受身技能都没法做(就是格斗的架招,被动技能,敌人攻击击中才触发)


要是能把敌人弄出来位移,就不用替身纯播片看了。

我刚才继续考虑了一下,因为系统限制,很难把敌人的图像不做出位移,虽然可以做出受创动作,但是却不能切换多种角度的受创动作来配合角色,只能用这种方式对模拟敌人进行攻击。

还可以前面画个前置动作,用跟灵梦那里学的“代形”符,先甩灵符贴敌方全体,把敌人变成这样,然后再对这个敌人进行攻击。


但是这样的话,动画有点太啰嗦了。如果系统没法继续弄得画,只能剧情说圆了。



作者: v2sam    时间: 2017-11-28 15:27
工作量加分666666666
作者: defisym    时间: 2017-11-28 16:22
本帖最后由 defisym 于 2017-11-28 16:25 编辑

嘛……仔细看了看,感觉在最后腿摔的部分力量感不太足
除了速度有些慢这一点之外,在半空中其实很难做出这样的动作
其实关于这个动作,做的华丽好看一些还是有参考的
比如下面这个
(, 下载次数: 296)
6R文件要求太小了,当然主要还是看最后一个动作
(, 下载次数: 292)
另外注意落地之后的烟尘,这也是打击感这种玄学的一部分
打击感粗略的分是三种,“力量感”“反馈”与“特效”
女主角空中翻身的速度太慢,滞空时间和马里奥有一拼;再加上动作有些违反常理,就显得力量感不足而且有点“假”
反馈方面,因为敌人还没做所以也不好说什么……顺应“力”的方向是很重要的一环,朝右边踢人往左边倒肯定不可以
最后就是特效,除了闪光之类的,飚血啊,画面震动啊,画面暂停啊,落地的烟尘啊都算
好多动作游戏在你打中敌人的一瞬间动作都会有明显的暂停,告诉你“确实打到了”而不是软绵绵的推过去了
关于打击感的部分我也只能是扯淡,知乎上看到过一篇文章,上面好多东西都是凭印象复述的,刚才刻意去找了找没有找到ORZ……
看来收藏是一个好习惯啊!(逃




作者: 89444640    时间: 2017-11-28 17:12
本帖最后由 89444640 于 2017-11-29 10:57 编辑
defisym 发表于 2017-11-28 16:22
嘛……仔细看了看,感觉在最后腿摔的部分力量感不太足
除了速度有些慢这一点之外,在半空中其实很难做出这 ...

非常感谢~确实动画整合还是需要加强,素材够多能做出更好的效果……
这啥啥啥回旋摔就算了……这种旋转我好晕 - -b同样的还可以看下蚁人的女主角的夹脖子摔,那个我觉得更好看
然后腿的话可以看下美国队长的后脚跟踹- -b
本来就有心做个类似狂战传说的四天幻葬,各种角度踹8脚,超长强技……但是这又不是act - -b
要是能让玩家自己按键接着连还好,
←←+D  ↓↑+D  →↓↘+D   →↘↓↙←+D 然后可以连超必杀。
可惜就算能画出来,对应的程序我弄不出来。

照这样再画下去,主角格斗系腿技就更多了,我还是喜欢看用剑砍的- -b

这个动作其实不合理的,运动规律也不合理,这个简直就是接半边反弹的力量,带着角色和敌人一起过去,而且角色起身时候是向前的力,三次元人类不可能做出这种动作的。

但是,二次元嘛~咱们玩act跳跃后空中能转换方向谁都喜欢不是XD,为了手感,让物理规律妥协点吧XD

最根本原因,是因为我有前面侧踢没用上的动作素材,因为转角等各个原因,我预览的gif你没看见,测试了7、8种不同的方式,要不然这个摔应该是用脚夹起来空中转换,用前腿趴着着地的,一个是我为最初画这个目的就是为了要摔反向,如果动作合理,这个2P站位,起手又该背面朝着玩家了,

如果能听到音效,其实总的来说还是可以的,滞空时间是因为我哪个动作倒腾的,而且位置太难调了,正常运动规律应该是上升快速然后减速,有个空中停顿然后加速下落,为了让人看清楚故意拖长了滞空时间,按说这个时候如果是必杀技效果,加个红或者蓝的残影效果就好多了。

因为没看到素材,其实为了左右腿的遮挡,我把角色被遮挡的腿单独分出来了,如果加残影可能会很麻烦……
还是修理一下运动规律吧。
落地光效我故意像点的了,结果花小了,因为像素化的光效配合人物大多kof传统大小的,外加帧少……打击效果减弱了不少,实在不行我还是拿pi3特效堆一下吧,毕竟比手绘效率高太多了,落地的要是真画出很好看的效果,真的不比画个人物简单……我又不能用商业游戏成品素材,照着画又没意思,自己起个效果很难。

rpg暂停这个就免了……拖时间啊……效果好持续时间长的招式,虽然是好看,但是一定要限制使用机会。
毕竟不会只看一遍 - -b

力量感,动作起手后摇就是了
反馈,敌人受创动作
特效……好吧我需要一个特效师……真心好多软件合成效果画不出来啊……
真能手绘出各种华丽效果的是专业动画师--b

作者: soulsaga    时间: 2017-11-28 20:19
本帖最后由 soulsaga 于 2017-11-28 20:21 编辑

$game_screen.start_shake(SHAKE_POWER, SHAKE_SPEED, SHAKE_TIME)
LZ你要的画面震动脚本..可在事件脚本里用..
SHAKE_POWER = 震动强度 1-9
SHAKE_SPEED = 震动速度 1-9
SHAKE_TIME 震动持续时间
但是要在某帧震动倒是个难题..

作者: 鸟猫    时间: 2017-11-29 09:44
哇哦,这个好有意思,帧数已经挺高的了啊,赞一个
作者: fux2    时间: 2017-11-29 09:49
如果摔的过程改成一个稍微蓄力的感觉可能更好,
现在夹住头之后往后翻的过程敌人是跟着脚同步匀速后摔的,
如果人物后翻的前几帧不将敌人带起来,仅仅是人物自己后翻,接着一个超高速的发力将敌人带起,
让敌人以更快的速度追上后翻的主角,同时落地打击感应该会棒一点。
作者: 89444640    时间: 2017-11-29 10:48
本帖最后由 89444640 于 2017-11-29 10:57 编辑
fux2 发表于 2017-11-29 09:49
如果摔的过程改成一个稍微蓄力的感觉可能更好,
现在夹住头之后往后翻的过程敌人是跟着脚同步匀速后摔的,
...

按照您提示的这个方法会出现不同的效果,但是估计动作会缺帧,根据思路,可能不用投技,用上次的那个转身体力度更大,但是打的是角色朝向了,
这就相当于角色把敌人踹飞后反弹  →力 (咚) 力← 角色转身侧踢方向,两个相对的力造成的伤害更大。


如果角色动作够多,尝试拼接各种不同类型的招式真的挺好玩的XD


要不我发素材上来,尝试拼接一下,挺好玩的XD

已经按照6楼的思路拿软件做容易实现的光效,手绘我试了,好难,目前技术画不出来,落地时候的效果像砸碎一堆石头
因为光效不是像素的关系造成容量无法上传,传图床不安全,只能用附件卷轴压缩了。
(, 下载次数: 74)

(, 下载次数: 69)


增加了落地时的闪烁以及敌人落地后的弹跳,其实最容易表现出力度的,是需要做落地时候的背景震动。





作者: soulsaga    时间: 2017-11-29 12:52
本帖最后由 soulsaga 于 2017-11-29 19:11 编辑

[pre lang="ruby"]SHAKEID = 2
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● 初始化变量
  #--------------------------------------------------------------------------
  alias initialize_SHAKE initialize
  def initialize
    $shake_frame = []
    initialize_SHAKE
  end
  end

class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 处理角色动作
  #--------------------------------------------------------------------------
  alias update_actor_SHAKE update_actor_animation
  def update_actor_animation
    $shake_index = @frame_index
    for i in 0..$shake_frame.size-1
    $game_system.battle_interpreter.setup($data_common_events[200].list, 0) if @frame_index == $shake_frame and $se_skill_id and $data_skills[$se_skill_id].element_set.include?(SHAKEID)
  end
  if $fanime_frame_max == @frame_index
    $shake_frame = []
    end
    update_actor_SHAKE
  end
#--------------------------------------------------------------------------
  # ● 处理敌人动作
  #--------------------------------------------------------------------------
  alias update_enemy_SHAKE update_enemy_animation
  def update_enemy_animation
    $shake_index = @frame_index
    for i in 0..$shake_frame.size-1
    $game_system.battle_interpreter.setup($data_common_events[199].list, 0) if @frame_index == $shake_frame and $se_skill_id and $data_skills[$se_skill_id].element_set.include?(SHAKEID)
    end
  if $fanime_frame_max == @frame_index
    $shake_frame = []
    end
    update_enemy_SHAKE
  end
end[/pre]



撸了个动画指定帧数触发震动..

事件脚本$shake_frame = [要震动的帧数,要震动的帧数,要震动的帧数到指定帧数就会执行199和200号公共事..对应角色和敌人动画..
大概不能在最后2帧震动..
插入到MAIN上面

更新可以判断技能的属性触发震动..SHAKEID=你定义的属性ID


另外事件脚本用$shake_index == 当前动画帧数..


作者: fux2    时间: 2017-11-29 14:28
89444640 发表于 2017-11-29 10:48
按照您提示的这个方法会出现不同的效果,但是估计动作会缺帧,根据思路,可能不用投技,用上次的那个转身 ...

emmmmmmmmm,其实和我想的不大一样辣,不过比1楼的打击感好像强些。
作者: soulsaga    时间: 2017-11-29 19:05
本帖最后由 soulsaga 于 2017-11-29 19:32 编辑

找到个按键发动技能脚本..根据用法..或许可完成LZ要的中途输入指令发动超必杀..[pre lang="ruby"]#==============================================================================
# ■ XP-RGSS-33 コマンドスキル [Ver.2.3.0]          by Claimh
#------------------------------------------------------------------------------
#   コマンド入力によってスキルを発動させます。
#   コマンド入力に失敗した場合、威力減少(&アニメーション変化)
#==============================================================================

module CommandSkill
  # キー簡易置き換え
  A = Input::A            # キーボード:Z
  B = Input::B            # キーボード:X
  C = Input::C            # キーボード:C
  X = Input::X            # キーボード:A
  Y = Input::Y            # キーボード:S
  Z = Input::Z            # キーボード:D
  L = Input::L            # キーボード:Q
  R = Input::R            # キーボード:W
  UP = Input::UP
  DOWN = Input::DOWN
  LEFT = Input::LEFT
  RIGHT = Input::RIGHT
  RAND = "?"             # ランダムキー
#==============================================================================
# □ カスタマイズSTART
#==============================================================================
  # 1キーあたりの入力時間
  KEY_SEC = 1.0

  # キー入力時に表示するバーのファイル名(Graphics/Windowskinsにインポート)
  T_BAR_NAME = "bar"

  # コマンド表示タイプ
  #   true :ゲームパッド式
  #  false:キーボード式
  KEY_TYPE = true

  # コマンド入力成功時に対象を全体化(true:有効|false:無効)
  ALL_ATK = false
  # 全体化するスキルID
  ALL_ATK_SK = [57, 61]

  # 成功時のSE(nil:無効)
  COMP_SE = "056-Right02"
  # 失敗時のSE(nil:無効)
  MISS_SE = "058-Wrong02"
  # 失敗時に対象側アニメーションを変える(true:有効|false:無効)
  MISS_ANIME = true

  # コマンド表示時の文字間隔
  TEXT_W = 32

  # スキル設定
  T_SKILL = {
    #スキルID => [[キー1,キー2,・・・],失敗時の威力(%)(,失敗時のアニメID)]
        1  => [[UP,DOWN], 0.0],
        7  => [[UP,DOWN], 50],
        8  => [[X,C,Z], 50],
        9  => [[DOWN,X,A,B], 50],
        10 => [[LEFT,UP], 50],
        11 => [[L,X,R], 50],
        12 => [[X,C,RIGHT,R], 50],
        13 => [[UP,RIGHT], 50],
        14 => [[L,Z,A], 50],
        15 => [[R,X,X,DOWN], 50],
        16 => [[DOWN, RIGHT], 50],
        17 => [[A,B,C], 50],
        18 => [[Y,X,DOWN,B], 50],
        19 => [[LEFT,DOWN], 50],
        20 => [[Z,Y,A], 50],
        21 => [[B,C,X,L], 50],
        22 => [[RIGHT,DOWN], 50],
        23 => [[A,B,R], 50],
        24 => [[X,Y,LEFT,R], 50],
        25 => [[LEFT,RIGHT], 50],
        26 => [[X,L,B], 50],
        27 => [[LEFT,X,C,Z], 50],
        28 => [[LEFT,DOWN], 50],
        29 => [[C,X,A], 50],
        30 => [[X,Z,C,UP], 50],
        31 => [[UP,DOWN,X], 0],
        32 => [[LEFT,RIGHT,L,R], 50],
        57 => [[RAND, RAND], 10],
        58 => [[C, X, UP], 50],
        59 => [[A, UP, RIGHT, A], 50],
        60 => [[Z, C, A, B], 50],
        61 => [[X, RAND], 50],
        62 => [[UP, X, DOWN], 50],
        63 => [[LEFT, C, Y, A], 50],
        64 => [[X, C, Y, A], 50],
        65 => [[Y, A], 50],
        66 => [[RIGHT, B, A], 50],
        67 => [[LEFT, UP, Z, A], 50],
        68 => [[Y, B, Y, A], 50],
        69 => [[LEFT, A], 50],
        70 => [[A, C, A], 50],
        71 => [[B, B, A, A], 50],
        72 => [[A, B, X, Y], 50],
        73 => [[X, A], 50],
        74 => [[Y, A, B], 50],
        75 => [[LEFT, RIGHT, Y, A], 50],
        76 => [[A, C, L, A], 50],
        77 => [[R, X], 50],
        78 => [[L, C, R], 50],
        79 => [[LEFT, L, RIGHT, R], 50],
        80 => [[C, C, Z, RIGHT], 50],
        #100 => [[LEFT], 0,0],
        101 => [[LEFT], 0,0]
  }

#==============================================================================
# □ カスタマイズEND
#==============================================================================
  R_KEYS = [A,B,C,X,Y,Z,L,R,UP,DOWN,LEFT,RIGHT] # ランダムキーに使うキー配列
  #--------------------------------------------------------------------------
  # ● キーリスト取得
  #--------------------------------------------------------------------------
  def self.get_key_list(skill_id)
    return nil if T_SKILL[skill_id].nil?
    return nil if T_SKILL[skill_id][0].nil?
    return T_SKILL[skill_id][0]
  end
  #--------------------------------------------------------------------------
  # ● ランダムキー変換
  #--------------------------------------------------------------------------
  def self.change_rand(list)
    ret_list = []
    for i in 0...list.size
      ret_list.push(list == RAND ? R_KEYS[rand(R_KEYS.size)] : list)
    end
    return ret_list
  end
end



#==============================================================================
# ■ Input
#==============================================================================
module Input
  module_function
  #--------------------------------------------------------------------------
  # ● 指定キー以外のキー入力判定
  #--------------------------------------------------------------------------
  def n_trigger?(num)
    if trigger?(num)
      return false
    elsif trigger?(A) or trigger?(B) or trigger?(C) or
          trigger?(X) or trigger?(Y) or trigger?(Z) or
          trigger?(L) or trigger?(R) or
          trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
        return true
    end
    return false    # 未入力または使用しないキーの場合
  end
  #--------------------------------------------------------------------------
  # ● キー変換テーブル(表示文字取得用)
  #--------------------------------------------------------------------------
  GP_KEY = {  # ゲームパッド用変換テーブル
    A=>"A",B=>"B",C=>"C",X=>"X",Y=>"Y",Z=>"Z",L=>"L",R=>"R",
    UP=>"↑",DOWN=>"↓",LEFT=>"←",RIGHT=>"→"
  }
  KB_KEY = {  # キーボード用変換テーブル
    A=>"Z",B=>"X",C=>"C",X=>"A",Y=>"S",Z=>"D",L=>"Q",R=>"W",
    UP=>"↑",DOWN=>"↓",LEFT=>"←",RIGHT=>"→"
  }
  def key_converter(key)
    return CommandSkill::RAND if key == CommandSkill::RAND
    # ゲームパッドタイプ
    if CommandSkill::KEY_TYPE
      ret = GP_KEY[key]
    # キーボードタイプ
    else
      ret = KB_KEY[key]
    end
    return (ret == nil ? "" : ret )
  end
end


#==============================================================================
# ■ Window_KeyCounter
#------------------------------------------------------------------------------
#  進捗率を表示するバー
#==============================================================================
class Window_KeyCounter < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     key :キー配列
  #--------------------------------------------------------------------------
  def initialize
    #p 111
    super(0, 256, 150, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.z = 1            # バトラーよりも奥に表示
    refresh(0)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #       current = 進捗率(%)
  #--------------------------------------------------------------------------
  def refresh(current)
    self.contents.clear
    #draw_counter_bar(0, 0, 100-current)    # 進捗方向:←
    draw_counter_bar(0, 0, current)         # 進捗方向:→
  end
  #--------------------------------------------------------------------------
  # ● バー表示
  #       x       : x表示位置
  #       y       : y表示位置
  #       current : 進捗率(%)
  #--------------------------------------------------------------------------
  def draw_counter_bar(x, y, current)
    bitmap = RPG::Cache.windowskin(CommandSkill::T_BAR_NAME)
    cw = bitmap.width * current / 100
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x, y, bitmap, src_rect)
  end
end

#==============================================================================
# ■ Window_KeyCount
#------------------------------------------------------------------------------
#  入力するキーを表示するウィンドウ。
#==============================================================================
class Window_KeyCount < Window_Base
  TEXT_H = 32   # 文字高さ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     key :キー配列
  #--------------------------------------------------------------------------
  def initialize(key)
    super(0, 220, 150, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160    # 半透明
    self.z = 0            # 進捗バーよりも奥に表示
    @key = key
    @key_count = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@key.size
      x = i * CommandSkill::TEXT_W    # 文字間の間隔
      if i < @key_count
        self.contents.font.color = knockout_color
      else
        self.contents.font.color = normal_color
      end
      self.contents.draw_text(x, 0, 100, TEXT_H, Input.key_converter(@key))
    end
  end
  #--------------------------------------------------------------------------
  # ● キーカウント
  #--------------------------------------------------------------------------
  def key_in
    @key_count += 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ● テキスト表示
  #       text : テキスト
  #--------------------------------------------------------------------------
  def text_in(text)
    self.contents.clear
    self.contents.draw_text(0, 0, 100, TEXT_H, text, 1)
  end
end


#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  attr_accessor   :cmd_miss_flag  # コマンド入力ミス
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_cmd_skill initialize
  def initialize
    initialize_cmd_skill     # 原物
    @cmd_miss_flag = false
    $csk = 1
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #--------------------------------------------------------------------------
  alias skill_effect_cmd_skill skill_effect
  def skill_effect(user, skill)
    if $scene.is_a?(Scene_Battle) and user.cmd_miss_flag
      skill_copy = $data_skills[skill.id].dup
      skill.power = skill.power * CommandSkill::T_SKILL[skill.id][1] / 100
      skill.hit = 0 if skill.power == 0   # 威力0で命中しない補正
    end
    ret = skill_effect_cmd_skill(user, skill)
    if $scene.is_a?(Scene_Battle) and user.cmd_miss_flag
      user.cmd_miss_flag = false
      $data_skills[skill.id] = skill_copy.dup
    end
    return ret
  end
end


#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● CMD Skill初期化
  #--------------------------------------------------------------------------
  def init_cmd_skill
    @active_battler.cmd_miss_flag = false
    @cmd_skill_ok = false
    @cmd_skill_miss_flag = false
  end
  #--------------------------------------------------------------------------
  # ● CMD Skill実行可能?
  #--------------------------------------------------------------------------
  def cmd_skill_enable?(skill_id)
    # エネミーは不可
    return false if @active_battler.is_a?(Game_Enemy)
    # データなし
    return false if CommandSkill.get_key_list(skill_id).nil?
    # 閃き時コマンドなし
    return false if defined?(SysFlash) and @active_battler.flash_flg
    # 強制アクションでなければ
    unless @active_battler.current_action.forcing
      # SP 切れなどで使用できなくなった場合
      unless @active_battler.skill_can_use?(skill_id)
        # アクション強制対象のバトラーをクリア
        $game_temp.forcing_battler = nil
        return false
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● CMD Skill前処理
  #--------------------------------------------------------------------------
  def pre_cmd_skill
    init_cmd_skill
    $csk = @active_battler.current_action.skill_id
    skill_id = @active_battler.current_action.skill_id
    return unless cmd_skill_enable?(skill_id)
    # コマンドスキル発動
    make_cmd_skill_skill_result(skill_id)
    #skill_update_phase4_step3(skill_id)
    # 全体化
    if CommandSkill::ALL_ATK and @cmd_skill_ok
      if CommandSkill::ALL_ATK_SK.include?(skill_id)
        @skill_copy = @skill.dup
        @skill.scope = 2
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● CMD Skill後処理
  #--------------------------------------------------------------------------
  def after_cmd_skill
    if CommandSkill::ALL_ATK and @cmd_skill_ok
      if CommandSkill::ALL_ATK_SK.include?(@skill_copy.id)
        @skill = $data_skills[@skill_copy.id] = @skill_copy
      end
    end
    # Miss時にアニメーションを変える
    if CommandSkill::MISS_ANIME and @cmd_skill_miss_flag
      unless CommandSkill::T_SKILL[@skill.id][2].nil?
        @animation1_id = CommandSkill::T_SKILL[@skill.id][1]
        @animation2_id = CommandSkill::T_SKILL[@skill.id][2]
      end
    end
    init_cmd_skill
  end
  #--------------------------------------------------------------------------
  # ● コマンドスキル Window X位置取得
  #--------------------------------------------------------------------------
  def cmd_skill_window_x
    #「戦闘位置補正」併用時にコメント外す
    #case $game_party.actors.size
    #when 1
    #  actor_x = 240
    #when 2
    #  actor_x = @active_battler.index * 240 + 120
    #when 3
    #  actor_x = @active_battler.index * 200 + 40
    #when 4
      actor_x = @active_battler.index * 160
    #end
    return actor_x
  end
  #--------------------------------------------------------------------------
  # ● コマンドスキル コマンド入力ループUPDATE
  #--------------------------------------------------------------------------
  def cmd_skill_loop_update
    Graphics.update
    Input.update
    @spriteset.update
  end
  #--------------------------------------------------------------------------
  # ● コマンドスキル コマンド入力ループ
  #--------------------------------------------------------------------------
  def cmd_skill_loop(cmd_list, time)
    key_count = 0
    for i in 0...time
      cmd_skill_loop_update
      # キー入力に成功?
      if Input.trigger?(cmd_list[key_count])
        key_count += 1
        @window_keycount.key_in
      elsif Input.n_trigger?(cmd_list[key_count])   # 違うキーを押した
        # Miss時 SE演奏
        Audio.se_play("Audio/SE/" + CommandSkill::MISS_SE) if CommandSkill::MISS_SE != nil
        break
      end
      # 全キー入力完了
      if key_count >= cmd_list.size
        @window_keycount.text_in("Complete")
        # Complete時 SE演奏
        Audio.se_play("Audio/SE/" + CommandSkill::COMP_SE) if CommandSkill::COMP_SE != nil
        @cmd_skill_ok = true
        break
      end
      # 進捗バーの更新
      @window_counter.refresh((i*100/time).truncate)
    end
  end
  #--------------------------------------------------------------------------
  # ● コマンドスキル 結果作成
  #--------------------------------------------------------------------------
  def make_cmd_skill_skill_result(skill_id)
    # コマンドリスト取得
    cmd_list = CommandSkill.get_key_list(skill_id)
    cmd_list = CommandSkill.change_rand(cmd_list)
    time = CommandSkill::KEY_SEC * cmd_list.size * Graphics.frame_rate
    # キー入力&カウントウィンドウ作成
    @window_keycount = Window_KeyCount.new(cmd_list)
    @window_counter = Window_KeyCounter.new
    @window_keycount.x = @window_counter.x = cmd_skill_window_x
    # コマンド入力ループ
    cmd_skill_loop(cmd_list, time)
    # ミス時は"Miss"表示
    unless @cmd_skill_ok
      @window_keycount.text_in("Miss")
      @active_battler.cmd_miss_flag = true
      @cmd_skill_miss_flag = true
    end
    # Miss、Complete表示用のウェイト
    for i in 0...10
      cmd_skill_loop_update
    end
    @window_keycount.dispose
    @window_counter.dispose
  end
#------------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成
  #--------------------------------------------------------------------------
  alias make_skill_action_result_cmd_skill make_skill_action_result
  def make_skill_action_result
    pre_cmd_skill
    make_skill_action_result_cmd_skill   # 原物
    after_cmd_skill
  end
end[/pre]


用法..第1段技能调用公共事件强行行动用技能..然后这个强制技能的技能ID写在技能指令的列表里的话..输入命令后就可以发动技能了....

指令列表填RAND就是随机一个命令..可填多个..


美中不足的是..等待输入指令时..不会是播放动画中..





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