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

Project1

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

[原创发布] 横版战斗动画 逆行九霄 突进+指令投

[复制链接]

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
跳转到指定楼层
1
发表于 2017-11-28 12:01:26 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 89444640 于 2017-11-29 10:59 编辑

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

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



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


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

评分

参与人数 7+7 收起 理由
jujuba02 + 1 流畅!
无端忆君 + 1 精品文章
迷糊的安安 + 1 以赞大佬为荣!
defisym + 1 向大佬低头
wildprophecy + 1 精品文章
wabcmcc + 1
MeowSnow + 1 撞墙和落地可以加个屏幕振动

查看全部评分

Lv5.捕梦者

梦石
0
星屑
36427
在线时间
10796 小时
注册时间
2009-3-15
帖子
4814
13
发表于 2017-11-29 19:05:34 | 只看该作者
本帖最后由 soulsaga 于 2017-11-29 19:32 编辑

找到个按键发动技能脚本..根据用法..或许可完成LZ要的中途输入指令发动超必杀..
RUBY 代码复制
  1. #==============================================================================
  2. # ■ XP-RGSS-33 コマンドスキル [Ver.2.3.0]          by Claimh
  3. #------------------------------------------------------------------------------
  4. #   コマンド入力によってスキルを発動させます。
  5. #   コマンド入力に失敗した場合、威力減少(&アニメーション変化)
  6. #==============================================================================
  7.  
  8. module CommandSkill
  9.   # キー簡易置き換え
  10.   A = Input::A            # キーボード:Z
  11.   B = Input::B            # キーボード:X
  12.   C = Input::C            # キーボード:C
  13.   X = Input::X            # キーボード:A
  14.   Y = Input::Y            # キーボード:S
  15.   Z = Input::Z            # キーボード:D
  16.   L = Input::L            # キーボード:Q
  17.   R = Input::R            # キーボード:W
  18.   UP = Input::UP
  19.   DOWN = Input::DOWN
  20.   LEFT = Input::LEFT
  21.   RIGHT = Input::RIGHT
  22.   RAND = "?"             # ランダムキー
  23. #==============================================================================
  24. # □ カスタマイズSTART
  25. #==============================================================================
  26.   # 1キーあたりの入力時間
  27.   KEY_SEC = 1.0
  28.  
  29.   # キー入力時に表示するバーのファイル名(Graphics/Windowskinsにインポート)
  30.   T_BAR_NAME = "bar"
  31.  
  32.   # コマンド表示タイプ
  33.   #   true :ゲームパッド式
  34.   #  false:キーボード式
  35.   KEY_TYPE = true
  36.  
  37.   # コマンド入力成功時に対象を全体化(true:有効|false:無効)
  38.   ALL_ATK = false
  39.   # 全体化するスキルID
  40.   ALL_ATK_SK = [57, 61]
  41.  
  42.   # 成功時のSE(nil:無効)
  43.   COMP_SE = "056-Right02"
  44.   # 失敗時のSE(nil:無効)
  45.   MISS_SE = "058-Wrong02"
  46.   # 失敗時に対象側アニメーションを変える(true:有効|false:無効)
  47.   MISS_ANIME = true
  48.  
  49.   # コマンド表示時の文字間隔
  50.   TEXT_W = 32
  51.  
  52.   # スキル設定
  53.   T_SKILL = {
  54.     #スキルID => [[キー1,キー2,・・・],失敗時の威力(%)(,失敗時のアニメID)]
  55.         1  => [[UP,DOWN], 0.0],
  56.         7  => [[UP,DOWN], 50],
  57.         8  => [[X,C,Z], 50],
  58.         9  => [[DOWN,X,A,B], 50],
  59.         10 => [[LEFT,UP], 50],
  60.         11 => [[L,X,R], 50],
  61.         12 => [[X,C,RIGHT,R], 50],
  62.         13 => [[UP,RIGHT], 50],
  63.         14 => [[L,Z,A], 50],
  64.         15 => [[R,X,X,DOWN], 50],
  65.         16 => [[DOWN, RIGHT], 50],
  66.         17 => [[A,B,C], 50],
  67.         18 => [[Y,X,DOWN,B], 50],
  68.         19 => [[LEFT,DOWN], 50],
  69.         20 => [[Z,Y,A], 50],
  70.         21 => [[B,C,X,L], 50],
  71.         22 => [[RIGHT,DOWN], 50],
  72.         23 => [[A,B,R], 50],
  73.         24 => [[X,Y,LEFT,R], 50],
  74.         25 => [[LEFT,RIGHT], 50],
  75.         26 => [[X,L,B], 50],
  76.         27 => [[LEFT,X,C,Z], 50],
  77.         28 => [[LEFT,DOWN], 50],
  78.         29 => [[C,X,A], 50],
  79.         30 => [[X,Z,C,UP], 50],
  80.         31 => [[UP,DOWN,X], 0],
  81.         32 => [[LEFT,RIGHT,L,R], 50],
  82.         57 => [[RAND, RAND], 10],
  83.         58 => [[C, X, UP], 50],
  84.         59 => [[A, UP, RIGHT, A], 50],
  85.         60 => [[Z, C, A, B], 50],
  86.         61 => [[X, RAND], 50],
  87.         62 => [[UP, X, DOWN], 50],
  88.         63 => [[LEFT, C, Y, A], 50],
  89.         64 => [[X, C, Y, A], 50],
  90.         65 => [[Y, A], 50],
  91.         66 => [[RIGHT, B, A], 50],
  92.         67 => [[LEFT, UP, Z, A], 50],
  93.         68 => [[Y, B, Y, A], 50],
  94.         69 => [[LEFT, A], 50],
  95.         70 => [[A, C, A], 50],
  96.         71 => [[B, B, A, A], 50],
  97.         72 => [[A, B, X, Y], 50],
  98.         73 => [[X, A], 50],
  99.         74 => [[Y, A, B], 50],
  100.         75 => [[LEFT, RIGHT, Y, A], 50],
  101.         76 => [[A, C, L, A], 50],
  102.         77 => [[R, X], 50],
  103.         78 => [[L, C, R], 50],
  104.         79 => [[LEFT, L, RIGHT, R], 50],
  105.         80 => [[C, C, Z, RIGHT], 50],
  106.         #100 => [[LEFT], 0,0],
  107.         101 => [[LEFT], 0,0]
  108.   }
  109.  
  110. #==============================================================================
  111. # □ カスタマイズEND
  112. #==============================================================================
  113.   R_KEYS = [A,B,C,X,Y,Z,L,R,UP,DOWN,LEFT,RIGHT] # ランダムキーに使うキー配列
  114.   #--------------------------------------------------------------------------
  115.   # ● キーリスト取得
  116.   #--------------------------------------------------------------------------
  117.   def self.get_key_list(skill_id)
  118.     return nil if T_SKILL[skill_id].nil?
  119.     return nil if T_SKILL[skill_id][0].nil?
  120.     return T_SKILL[skill_id][0]
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● ランダムキー変換
  124.   #--------------------------------------------------------------------------
  125.   def self.change_rand(list)
  126.     ret_list = []
  127.     for i in 0...list.size
  128.       ret_list.push(list[i] == RAND ? R_KEYS[rand(R_KEYS.size)] : list[i])
  129.     end
  130.     return ret_list
  131.   end
  132. end
  133.  
  134.  
  135.  
  136. #==============================================================================
  137. # ■ Input
  138. #==============================================================================
  139. module Input
  140.   module_function
  141.   #--------------------------------------------------------------------------
  142.   # ● 指定キー以外のキー入力判定
  143.   #--------------------------------------------------------------------------
  144.   def n_trigger?(num)
  145.     if trigger?(num)
  146.       return false
  147.     elsif trigger?(A) or trigger?(B) or trigger?(C) or
  148.           trigger?(X) or trigger?(Y) or trigger?(Z) or
  149.           trigger?(L) or trigger?(R) or
  150.           trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
  151.         return true
  152.     end
  153.     return false    # 未入力または使用しないキーの場合
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● キー変換テーブル(表示文字取得用)
  157.   #--------------------------------------------------------------------------
  158.   GP_KEY = {  # ゲームパッド用変換テーブル
  159.     A=>"A",B=>"B",C=>"C",X=>"X",Y=>"Y",Z=>"Z",L=>"L",R=>"R",
  160.     UP=>"↑",DOWN=>"↓",LEFT=>"←",RIGHT=>"→"
  161.   }
  162.   KB_KEY = {  # キーボード用変換テーブル
  163.     A=>"Z",B=>"X",C=>"C",X=>"A",Y=>"S",Z=>"D",L=>"Q",R=>"W",
  164.     UP=>"↑",DOWN=>"↓",LEFT=>"←",RIGHT=>"→"
  165.   }
  166.   def key_converter(key)
  167.     return CommandSkill::RAND if key == CommandSkill::RAND
  168.     # ゲームパッドタイプ
  169.     if CommandSkill::KEY_TYPE
  170.       ret = GP_KEY[key]
  171.     # キーボードタイプ
  172.     else
  173.       ret = KB_KEY[key]
  174.     end
  175.     return (ret == nil ? "" : ret )
  176.   end
  177. end
  178.  
  179.  
  180. #==============================================================================
  181. # ■ Window_KeyCounter
  182. #------------------------------------------------------------------------------
  183. #  進捗率を表示するバー
  184. #==============================================================================
  185. class Window_KeyCounter < Window_Base
  186.   #--------------------------------------------------------------------------
  187.   # ● オブジェクト初期化
  188.   #     key :キー配列
  189.   #--------------------------------------------------------------------------
  190.   def initialize
  191.     #p 111
  192.     super(0, 256, 150, 80)
  193.     self.contents = Bitmap.new(width - 32, height - 32)
  194.     self.opacity = 0
  195.     self.z = 1            # バトラーよりも奥に表示
  196.     refresh(0)
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● リフレッシュ
  200.   #       current = 進捗率(%)
  201.   #--------------------------------------------------------------------------
  202.   def refresh(current)
  203.     self.contents.clear
  204.     #draw_counter_bar(0, 0, 100-current)    # 進捗方向:←
  205.     draw_counter_bar(0, 0, current)         # 進捗方向:→
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● バー表示
  209.   #       x       : x表示位置
  210.   #       y       : y表示位置
  211.   #       current : 進捗率(%)
  212.   #--------------------------------------------------------------------------
  213.   def draw_counter_bar(x, y, current)
  214.     bitmap = RPG::Cache.windowskin(CommandSkill::T_BAR_NAME)
  215.     cw = bitmap.width * current / 100
  216.     ch = bitmap.height
  217.     src_rect = Rect.new(0, 0, cw, ch)
  218.     self.contents.blt(x, y, bitmap, src_rect)
  219.   end
  220. end
  221.  
  222. #==============================================================================
  223. # ■ Window_KeyCount
  224. #------------------------------------------------------------------------------
  225. #  入力するキーを表示するウィンドウ。
  226. #==============================================================================
  227. class Window_KeyCount < Window_Base
  228.   TEXT_H = 32   # 文字高さ
  229.   #--------------------------------------------------------------------------
  230.   # ● オブジェクト初期化
  231.   #     key :キー配列
  232.   #--------------------------------------------------------------------------
  233.   def initialize(key)
  234.     super(0, 220, 150, 80)
  235.     self.contents = Bitmap.new(width - 32, height - 32)
  236.     self.back_opacity = 160    # 半透明
  237.     self.z = 0            # 進捗バーよりも奥に表示
  238.     @key = key
  239.     @key_count = 0
  240.     refresh
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● リフレッシュ
  244.   #--------------------------------------------------------------------------
  245.   def refresh
  246.     self.contents.clear
  247.     for i in 0...@key.size
  248.       x = i * CommandSkill::TEXT_W    # 文字間の間隔
  249.       if i < @key_count
  250.         self.contents.font.color = knockout_color
  251.       else
  252.         self.contents.font.color = normal_color
  253.       end
  254.       self.contents.draw_text(x, 0, 100, TEXT_H, Input.key_converter(@key[i]))
  255.     end
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● キーカウント
  259.   #--------------------------------------------------------------------------
  260.   def key_in
  261.     @key_count += 1
  262.     refresh
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ● テキスト表示
  266.   #       text : テキスト
  267.   #--------------------------------------------------------------------------
  268.   def text_in(text)
  269.     self.contents.clear
  270.     self.contents.draw_text(0, 0, 100, TEXT_H, text, 1)
  271.   end
  272. end
  273.  
  274.  
  275. #==============================================================================
  276. # ■ Game_Battler
  277. #==============================================================================
  278. class Game_Battler
  279.   attr_accessor   :cmd_miss_flag  # コマンド入力ミス
  280.   #--------------------------------------------------------------------------
  281.   # ● オブジェクト初期化
  282.   #--------------------------------------------------------------------------
  283.   alias initialize_cmd_skill initialize
  284.   def initialize
  285.     initialize_cmd_skill     # 原物
  286.     @cmd_miss_flag = false
  287.     $csk = 1
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● スキルの効果適用
  291.   #     user  : スキルの使用者 (バトラー)
  292.   #     skill : スキル
  293.   #--------------------------------------------------------------------------
  294.   alias skill_effect_cmd_skill skill_effect
  295.   def skill_effect(user, skill)
  296.     if $scene.is_a?(Scene_Battle) and user.cmd_miss_flag
  297.       skill_copy = $data_skills[skill.id].dup
  298.       skill.power = skill.power * CommandSkill::T_SKILL[skill.id][1] / 100
  299.       skill.hit = 0 if skill.power == 0   # 威力0で命中しない補正
  300.     end
  301.     ret = skill_effect_cmd_skill(user, skill)
  302.     if $scene.is_a?(Scene_Battle) and user.cmd_miss_flag
  303.       user.cmd_miss_flag = false
  304.       $data_skills[skill.id] = skill_copy.dup
  305.     end
  306.     return ret
  307.   end
  308. end
  309.  
  310.  
  311. #==============================================================================
  312. # ■ Scene_Battle
  313. #==============================================================================
  314. class Scene_Battle
  315.   #--------------------------------------------------------------------------
  316.   # ● CMD Skill初期化
  317.   #--------------------------------------------------------------------------
  318.   def init_cmd_skill
  319.     @active_battler.cmd_miss_flag = false
  320.     @cmd_skill_ok = false
  321.     @cmd_skill_miss_flag = false
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● CMD Skill実行可能?
  325.   #--------------------------------------------------------------------------
  326.   def cmd_skill_enable?(skill_id)
  327.     # エネミーは不可
  328.     return false if @active_battler.is_a?(Game_Enemy)
  329.     # データなし
  330.     return false if CommandSkill.get_key_list(skill_id).nil?
  331.     # 閃き時コマンドなし
  332.     return false if defined?(SysFlash) and @active_battler.flash_flg
  333.     # 強制アクションでなければ
  334.     unless @active_battler.current_action.forcing
  335.       # SP 切れなどで使用できなくなった場合
  336.       unless @active_battler.skill_can_use?(skill_id)
  337.         # アクション強制対象のバトラーをクリア
  338.         $game_temp.forcing_battler = nil
  339.         return false
  340.       end
  341.     end
  342.     return true
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● CMD Skill前処理
  346.   #--------------------------------------------------------------------------
  347.   def pre_cmd_skill
  348.     init_cmd_skill
  349.     $csk = @active_battler.current_action.skill_id
  350.     skill_id = @active_battler.current_action.skill_id
  351.     return unless cmd_skill_enable?(skill_id)
  352.     # コマンドスキル発動
  353.     make_cmd_skill_skill_result(skill_id)
  354.     #skill_update_phase4_step3(skill_id)
  355.     # 全体化
  356.     if CommandSkill::ALL_ATK and @cmd_skill_ok
  357.       if CommandSkill::ALL_ATK_SK.include?(skill_id)
  358.         @skill_copy = @skill.dup
  359.         @skill.scope = 2
  360.       end
  361.     end
  362.   end
  363.   #--------------------------------------------------------------------------
  364.   # ● CMD Skill後処理
  365.   #--------------------------------------------------------------------------
  366.   def after_cmd_skill
  367.     if CommandSkill::ALL_ATK and @cmd_skill_ok
  368.       if CommandSkill::ALL_ATK_SK.include?(@skill_copy.id)
  369.         @skill = $data_skills[@skill_copy.id] = @skill_copy
  370.       end
  371.     end
  372.     # Miss時にアニメーションを変える
  373.     if CommandSkill::MISS_ANIME and @cmd_skill_miss_flag
  374.       unless CommandSkill::T_SKILL[@skill.id][2].nil?
  375.         @animation1_id = CommandSkill::T_SKILL[@skill.id][1]
  376.         @animation2_id = CommandSkill::T_SKILL[@skill.id][2]
  377.       end
  378.     end
  379.     init_cmd_skill
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● コマンドスキル Window X位置取得
  383.   #--------------------------------------------------------------------------
  384.   def cmd_skill_window_x
  385.     #「戦闘位置補正」併用時にコメント外す
  386.     #case $game_party.actors.size
  387.     #when 1
  388.     #  actor_x = 240
  389.     #when 2
  390.     #  actor_x = @active_battler.index * 240 + 120
  391.     #when 3
  392.     #  actor_x = @active_battler.index * 200 + 40
  393.     #when 4
  394.       actor_x = @active_battler.index * 160
  395.     #end
  396.     return actor_x
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ● コマンドスキル コマンド入力ループUPDATE
  400.   #--------------------------------------------------------------------------
  401.   def cmd_skill_loop_update
  402.     Graphics.update
  403.     Input.update
  404.     @spriteset.update
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● コマンドスキル コマンド入力ループ
  408.   #--------------------------------------------------------------------------
  409.   def cmd_skill_loop(cmd_list, time)
  410.     key_count = 0
  411.     for i in 0...time
  412.       cmd_skill_loop_update
  413.       # キー入力に成功?
  414.       if Input.trigger?(cmd_list[key_count])
  415.         key_count += 1
  416.         @window_keycount.key_in
  417.       elsif Input.n_trigger?(cmd_list[key_count])   # 違うキーを押した
  418.         # Miss時 SE演奏
  419.         Audio.se_play("Audio/SE/" + CommandSkill::MISS_SE) if CommandSkill::MISS_SE != nil
  420.         break
  421.       end
  422.       # 全キー入力完了
  423.       if key_count >= cmd_list.size
  424.         @window_keycount.text_in("Complete")
  425.         # Complete時 SE演奏
  426.         Audio.se_play("Audio/SE/" + CommandSkill::COMP_SE) if CommandSkill::COMP_SE != nil
  427.         @cmd_skill_ok = true
  428.         break
  429.       end
  430.       # 進捗バーの更新
  431.       @window_counter.refresh((i*100/time).truncate)
  432.     end
  433.   end
  434.   #--------------------------------------------------------------------------
  435.   # ● コマンドスキル 結果作成
  436.   #--------------------------------------------------------------------------
  437.   def make_cmd_skill_skill_result(skill_id)
  438.     # コマンドリスト取得
  439.     cmd_list = CommandSkill.get_key_list(skill_id)
  440.     cmd_list = CommandSkill.change_rand(cmd_list)
  441.     time = CommandSkill::KEY_SEC * cmd_list.size * Graphics.frame_rate
  442.     # キー入力&カウントウィンドウ作成
  443.     @window_keycount = Window_KeyCount.new(cmd_list)
  444.     @window_counter = Window_KeyCounter.new
  445.     @window_keycount.x = @window_counter.x = cmd_skill_window_x
  446.     # コマンド入力ループ
  447.     cmd_skill_loop(cmd_list, time)
  448.     # ミス時は"Miss"表示
  449.     unless @cmd_skill_ok
  450.       @window_keycount.text_in("Miss")
  451.       @active_battler.cmd_miss_flag = true
  452.       @cmd_skill_miss_flag = true
  453.     end
  454.     # Miss、Complete表示用のウェイト
  455.     for i in 0...10
  456.       cmd_skill_loop_update
  457.     end
  458.     @window_keycount.dispose
  459.     @window_counter.dispose
  460.   end
  461. #------------------------------------------------------------------------------
  462.   #--------------------------------------------------------------------------
  463.   # ● スキルアクション 結果作成
  464.   #--------------------------------------------------------------------------
  465.   alias make_skill_action_result_cmd_skill make_skill_action_result
  466.   def make_skill_action_result
  467.     pre_cmd_skill
  468.     make_skill_action_result_cmd_skill   # 原物
  469.     after_cmd_skill
  470.   end
  471. end



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

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


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

点评

这个脚本冲突很少吧..根本没有重定义脚本..  发表于 2017-11-29 23:51
感觉冲突会很多,等全动画脚本调完了我整个测试你试试效果和实用性,如果能搓招连招,整个战斗方式都得改工作量太大,恐怕我弄不了。  发表于 2017-11-29 22:23
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42394
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

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

emmmmmmmmm,其实和我想的不大一样辣,不过比1楼的打击感好像强些。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36427
在线时间
10796 小时
注册时间
2009-3-15
帖子
4814
11
发表于 2017-11-29 12:52:27 | 只看该作者
本帖最后由 soulsaga 于 2017-11-29 19:11 编辑

RUBY 代码复制
  1. SHAKEID = 2
  2. class Spriteset_Battle
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化变量
  5.   #--------------------------------------------------------------------------
  6.   alias initialize_SHAKE initialize
  7.   def initialize
  8.     $shake_frame = []
  9.     initialize_SHAKE
  10.   end
  11.   end
  12.  
  13. class Sprite_Battler < RPG::Sprite
  14.   #--------------------------------------------------------------------------
  15.   # ● 处理角色动作
  16.   #--------------------------------------------------------------------------
  17.   alias update_actor_SHAKE update_actor_animation
  18.   def update_actor_animation
  19.     $shake_index = @frame_index
  20.     for i in 0..$shake_frame.size-1
  21.     $game_system.battle_interpreter.setup($data_common_events[200].list, 0) if @frame_index == $shake_frame[i] and $se_skill_id and $data_skills[$se_skill_id].element_set.include?(SHAKEID)
  22.   end
  23.   if $fanime_frame_max == @frame_index
  24.     $shake_frame = []
  25.     end
  26.     update_actor_SHAKE
  27.   end
  28. #--------------------------------------------------------------------------
  29.   # ● 处理敌人动作
  30.   #--------------------------------------------------------------------------
  31.   alias update_enemy_SHAKE update_enemy_animation
  32.   def update_enemy_animation
  33.     $shake_index = @frame_index
  34.     for i in 0..$shake_frame.size-1
  35.     $game_system.battle_interpreter.setup($data_common_events[199].list, 0) if @frame_index == $shake_frame[i] and $se_skill_id and $data_skills[$se_skill_id].element_set.include?(SHAKEID)
  36.     end
  37.   if $fanime_frame_max == @frame_index
  38.     $shake_frame = []
  39.     end
  40.     update_enemy_SHAKE
  41.   end
  42. end



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

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

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


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

点评

说起来事件脚本用$se_skill_id可以判断你在战斗用的技能ID..用这个在公共事件条件分岐来对应不同技能如何?  发表于 2017-11-29 19:54
更新脚本..技能属性对应震动  发表于 2017-11-29 19:03
只能对应一个招式,通用性……明天再试吧。  发表于 2017-11-29 17:19
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
10
 楼主| 发表于 2017-11-29 10:48:16 | 只看该作者
本帖最后由 89444640 于 2017-11-29 10:57 编辑
fux2 发表于 2017-11-29 09:49
如果摔的过程改成一个稍微蓄力的感觉可能更好,
现在夹住头之后往后翻的过程敌人是跟着脚同步匀速后摔的,
...

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


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


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

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

02.part2.rar (1006.85 KB, 下载次数: 69)


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




回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42394
在线时间
7602 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

9
发表于 2017-11-29 09:49:37 | 只看该作者
如果摔的过程改成一个稍微蓄力的感觉可能更好,
现在夹住头之后往后翻的过程敌人是跟着脚同步匀速后摔的,
如果人物后翻的前几帧不将敌人带起来,仅仅是人物自己后翻,接着一个超高速的发力将敌人带起,
让敌人以更快的速度追上后翻的主角,同时落地打击感应该会棒一点。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
5
星屑
3038
在线时间
612 小时
注册时间
2012-11-12
帖子
482

开拓者

8
发表于 2017-11-29 09:44:27 | 只看该作者
哇哦,这个好有意思,帧数已经挺高的了啊,赞一个

点评

谢谢~可惜没有专业动作原画经验,没有更细致的草图关键帧,只能像素一点点试……效率太低了。有经验的动作设计+像素,应该几天就能画出来。  发表于 2017-11-29 11:07
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36427
在线时间
10796 小时
注册时间
2009-3-15
帖子
4814
7
发表于 2017-11-28 20:19:00 | 只看该作者
本帖最后由 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-28 21:44
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
6
 楼主| 发表于 2017-11-28 17:12:32 | 只看该作者
本帖最后由 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

评分

参与人数 1+1 收起 理由
defisym + 1 dalao加油~

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5039
在线时间
1780 小时
注册时间
2012-7-3
帖子
1799

开拓者

5
发表于 2017-11-28 16:22:11 | 只看该作者
本帖最后由 defisym 于 2017-11-28 16:25 编辑

嘛……仔细看了看,感觉在最后腿摔的部分力量感不太足
除了速度有些慢这一点之外,在半空中其实很难做出这样的动作
其实关于这个动作,做的华丽好看一些还是有参考的
比如下面这个

6R文件要求太小了,当然主要还是看最后一个动作

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



评分

参与人数 1+1 收起 理由
89444640 + 1 我试着加烟尘效果和光效去

查看全部评分

Project Ktr进行中:
   
------------------
SRPG开发之六-天气与地形互动
→→围观
→→→去Lofter围观
------------------
离经叛道的扯淡者/伪独立游戏爱好者/Decade Studio(?)/造轮子真TM开心呀
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 06:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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