# 設定項目_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ module Input # 二度押しの受付時間 KS_DOUBLE_TRIGGER_TIMING = 18#/60 秒 # 二度押し・長押しをチェックするキー。適宜コメントアウトすると気のせい程度軽量化されると思います。 DOUBLE_KEYS = [ UP, DOWN, LEFT, RIGHT, A, B, C, X, Y, Z, L, R, SHIFT, CTRL, ALT, F5, F6, F7, F8, F9, ] end # 設定項目_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ =begin ★ks_ボタン二度押し・長押し 無印・Ace共用 □===制作・著作===□ MaidensnowOnline 暴兎 使用プロジェクトを公開する場合、readme等に当HP名とそのアドレスを記述してください。 使用報告はしてくれると喜びます。 □===配置場所===□ 基本スクリプトおよび基本エリアスは必要ありません。 エリアスのみで構成されているので、可能な限り"▼ メイン"の上、近くに配置してください。 まあ、Input.updateを再定義するスクリプトも普通ないような気がしますが・・・ □===説明・使用方法===□ Input.w_trigger?(ボタン名) で、キーが二度押しされたかを判定できるようにします。 最後に押してから、規定フレーム内にもう一度押すことで二度押しされたと判定されます。 汎用的な二度押し検知機能なので他の機能はありません。自作のスクリプトなどに組み込んで使用してください。 Input.l_press?(key, frame) で、キーが(frame/60)秒以上押しっぱなしになっているかを判定します。 押しっぱなしになっているフレーム数は、キーが離れたときとtriggerされたときに0に戻ります。 エリアスされるメソッド module Input def update =end module Input @ks_double_inputed = Hash.new(KS_DOUBLE_TRIGGER_TIMING) @ks_long_inputed = Hash.new(0) class << self alias update_for_double update unless $@ def update update_for_double @ks_double_inputed.delete_if{|key, value| #p key, w_trigger?(key) 0 > @ks_double_inputed[key] -= 1 } @ks_long_inputed.delete_if{|key, value| @ks_long_inputed[key] += 1 !press?(key) } DOUBLE_KEYS.each{|key| next unless trigger?(key) @ks_double_inputed[key] = @ks_double_inputed.default if @ks_double_inputed[key] == @ks_double_inputed.default @ks_long_inputed[key] = 1 } end end def self.w_trigger?(key) #二度押しを確認するデバッグ表示 #p key, @ks_double_inputed[key], @ks_double_inputed.default if trigger?(key) trigger?(key) && @ks_double_inputed[key] != @ks_double_inputed.default end def self.l_press?(key, frame) #二度押しを確認するデバッグ表示 #p key, @ks_long_inputed[key], frame if press?(key) @ks_long_inputed[key] >= frame end end