じ☆ve冰风 发表于 2024-4-19 22:55:05

恐惧剑刃版QTE

一点小东西,不敢在大神面前摆弄。
方法大多新定义,兼容性很高
超级容易整合(调整刷新)

一句话:提供思路,美化靠自己!

整合主站上的菜鸟横版,最下方
RUBY 代码
class Scene_Battle
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
#--------------------------------------------------------------------------
def update_phase4_step2(*arg)
    #========================================================================
    ifQTE::Switchand@active_battler.is_a?(Game_Actor)and@qte_window.ko == nil
      if(@active_battler.current_action.kind == 0and
      @active_battler.current_action.basic == 0)or
      @active_battler.current_action.kind == 1or
      @active_battler.current_action.kind == 2

      @qte_window.x = $game_party.actors.index(@active_battler) * 160
      @qte_window.visible = true
      @qte_window.start
      @phase4_step = 7
      @active_battler.blink = true
      return
      end
    end
    #========================================================================
    battler = convert_battler2(*arg)
    battler.action
    side_view_update_phase4_step2(*arg)
end
end






注释
RUBY 代码
# - 要应用QTE只需:
# - 1.(主方法)生成窗口
# - 2.(主回合)回合1的时候初始化需要的数据
# - 3.(主回合)插入一个新回合用来刷新QTE
# - 4.(主回合)在生成行动结果之前插入QTE
# - 4.(主回合)返回回合2继续执行其他内容
#----------------------------------------------------------------------------
# - 设置示范:
# - 找到 make_basic_action_result
# - if @active_battler.current_action.basic == 0 以下
# - 添加
# - if QTE::Switch and @active_battler.is_a?(Game_Actor) and @qte_window.ko == nil
# -   @qte_window.x = $game_party.actors.index(@active_battler) * 160
# -   @qte_window.visible = true
# -   @qte_window.start
# -   @phase4_step = 7
# -   @active_battler.blink = true
# -   return
# - end
# -
# - @qte_window.ko 记录胜败
# - if @qte_window.ko == "success"
# - if @qte_window.ko == "fail"


核心
RUBY 代码
#----------------------------------------------------------------------------
# - 快速反应事件(必要组件,夏娜全键盘)
#----------------------------------------------------------------------------
# - QTE设置
#--------------------------------------------------------------------------
module QTE
#--------------------------------------------------------------------------
# - 启动开关
#--------------------------------------------------------------------------
Switch = true
#--------------------------------------------------------------------------
# - 时限(秒钟) * 不是很精确
#--------------------------------------------------------------------------
Time = 2
#--------------------------------------------------------------------------
# - 动画
#--------------------------------------------------------------------------
Ani = []
Ani = 20# 胜利
Ani = 19# 失败
#--------------------------------------------------------------------------
# - 可使用键(需设置键码)
# - %w|A B C| 等同于 ["A", "B", "C"]
#--------------------------------------------------------------------------
Key = %w|A B C D E F G H I G K L M N O P Q R S T U V W X Y Z|
#--------------------------------------------------------------------------
# - 输入数量(范围表示)
#--------------------------------------------------------------------------
Number = 5..9
end

#------------------------------------------------------------------------------
# - 在战斗场景中应用QTE
#------------------------------------------------------------------------------
class Scene_Battle
#----------------------------------------------------------------------------
# - 主处理
#----------------------------------------------------------------------------
# - @qte_window - 展示命令及进度的窗口
#----------------------------------------------------------------------------
alias main_qte_old main
def main
    @qte_window = Window_BattleQTE.new
    main_qte_old
    @qte_window.dispose
end
#----------------------------------------------------------------------------
# - 初始化胜败记录
#----------------------------------------------------------------------------
# - update_phase4_step1 - 主回合 - 准备行动
#----------------------------------------------------------------------------
alias update_phase4_step1_qte_old update_phase4_step1
def update_phase4_step1
    @qte_window.ko = nil
    update_phase4_step1_qte_old
end
#----------------------------------------------------------------------------
# - update_phase4 - 主回合 - 刷新(刷新QTE)
#----------------------------------------------------------------------------
alias update_phase4_qte_old update_phase4
def update_phase4
    if@phase4_step == 7
      update_phase4_step_qte
    end
    update_phase4_qte_old
end
#----------------------------------------------------------------------------
# - 刷新QTE
#----------------------------------------------------------------------------
# - QTE::Time * Graphics.frame_rate - 刷新次数 * 每秒种的刷新次数
# - blink - 能周期地反复使精灵亮白的闪烁。是针对指令输入中的角色使用的效果
# - animation_id - 播放一次动画
# - phase4_step - 主回合 - 开始行动
#----------------------------------------------------------------------------
def update_phase4_step_qte
    if@qte_window.count > QTE::Time * Graphics.frame_rate
      @active_battler.blink = false
      @active_battler.animation_id = QTE::Ani
      @phase4_step = 2
      @qte_window.ko = "fail"
      @qte_window.visible = false
      return
    else
      if Kboard.trigger?(rkey(@qte_window.command))
      @qte_window.count = 0
      @qte_window.index += 1
      end
      if@qte_window.command == nil
      @active_battler.animation_id = QTE::Ani
      @active_battler.blink = false
      @phase4_step = 2
      @qte_window.ko = "success"
      @qte_window.visible = false
      return
      end
    end
    @qte_window.count += 1
    @qte_window.update
    @qte_window.refresh
end
#----------------------------------------------------------------------------
# - 字符转键码
#----------------------------------------------------------------------------
# - 还可在这里添加更多键码
# - “;”只是为了把when和return放在一行
#----------------------------------------------------------------------------
def rkey(key)
    case key
    when"A" ; return 0x41
    when"B" ; return 0x42
    when"C" ; return 0x43
    when"D" ; return 0x44
    when"E" ; return 0x45
    when"F" ; return 0x46
    when"G" ; return 0x47
    when"H" ; return 0x48
    when"I" ; return 0x49
    when"J" ; return 0x4A
    when"K" ; return 0x4B
    when"L" ; return 0x4C
    when"M" ; return 0x4D
    when"N" ; return 0x4E
    when"O" ; return 0x4F
    when"P" ; return 0x50
    when"Q" ; return 0x51
    when"R" ; return 0x52
    when"S" ; return 0x53
    when"T" ; return 0x54
    when"U" ; return 0x55
    when"V" ; return 0x56
    when"W" ; return 0x57
    when"X" ; return 0x58
    when"Y" ; return 0x59
    when"Z" ; return 0x5A
    end
end
end

#------------------------------------------------------------------------------
# - 展示命令及进度的窗口
#------------------------------------------------------------------------------
class Window_BattleQTE < Window_Base
#----------------------------------------------------------------------------
# - 定义实例变量
#----------------------------------------------------------------------------
# index : 当前位置
# count : 限时计数
# ko    : 记录胜败
#----------------------------------------------------------------------------
attr_accessor :index, :count, :ko
#----------------------------------------------------------------------------
# - 初始化窗口
#----------------------------------------------------------------------------
def initialize
    super(0, 256-30, 160, 64)
    self.back_opacity = 160
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
end
#----------------------------------------------------------------------------
# - 初始化实例变量
#----------------------------------------------------------------------------
def clear
    @keys = []
    @index = 0
    @count = 0
end
#----------------------------------------------------------------------------
# - 新事件
#----------------------------------------------------------------------------
def start
    clear
    @keys = []
    max = [*QTE::Number]
    while@keys.size < max
      key = QTE::Key
      @keys4
      @R_Key_Repeat = 0
      returntrue
    else
      returnfalse
    end
end
def trigger?(rkey)
    result = GetKeyState.call(rkey)
    if@R_Key_Hash == 1and result != 0
      returnfalse
    end
    if result != 0
      @R_Key_Hash = 1
      returntrue
    else
      @R_Key_Hash = 0
      returnfalse
    end
end
end

             本帖来自P1论坛作者恐惧剑刃,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=373343若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 恐惧剑刃版QTE