Sujet n°7711
Posté par Nuri Yuri le 31 Aoû - 18:37 (2010)
Titre : Module Input
Bonjour aujourd'hui j'avais rien d'autre a foutre que de coder un module alors je l'ai fait 42

Module Input


Ce script sert à reconnaitre toute les touches ou presque de votre clavier !
Voici le script
Module Input simple

Code:
#==================#
#Module Input  v0.4#
#==================#
module Input
  @trigger_api=Win32API.new("user32","GetAsyncKeyState",['i'],'i')
  @press_api=Win32API.new("user32","GetKeyState",['i'],'i')
  #==============================#
  #initialisation des constantes #
  #==============================#
  #Souris
  MOUSE_LEFT=1;MOUSE_RIGHT=2;MOUSE_CENTER=4
  #touches sur les coté
  BACKSPACE=8#la touche <=
  TAB=9
  ENTER=13
  SHIFT=16;CTRL=17;ALT=18
  PAUSE=19
  LOCK_MAJ=20
  ESC=27#ECHAP
  #espace
  SPACE=32
  #pages
  PAGE_DOWN=33;PAGE_UP=34;FIN=35;HOME=36
  #Directions
  LEFT=37;UP=38;RIGHT=39;DOWN=40
  #autre fonctions
  PRT_SC=44;INSERT=45;DELETE=46
  #Chiffres au dessus
  AN_0=48;AN_1=49;AN_2=50;AN_3=51;AN_4=52
  AN_5=53;AN_6=54;AN_7=55;AN_8=56;AN_9=57
  #Alphabet
  A=65;B=66;C=67;D=68;E=69;F=70;G=71;H=72;I=73;J=74;K=75;L=76;M=77;N=78;O=79
  P=80;Q=81;R=82;S=83;T=84;U=85;V=86;W=87;X=88;Y=89;Z=90;WINDOWS=91;MOUSE_MENU=93
  #Pavé numérique
  N_0=96;N_1=97;N_2=98;N_3=99;N_4=100
  N_5=101;N_6=102;N_7=103;N_8=104;N_9=105
  #operations
  MULT=106;PLUS=107;MOIN=109;DECI=110;DIVI=111
  #Touches Fonction
  F1=112;F2=113;F3=114;F4=115;F5=116;F6=117
  F7=118;F8=119;F9=120;F10=121;F11=122;F12=123
  #d'autres fonctions
  LOCK_NUM=144
  SHIFT_LEFT=160;SHIFT_RIGHT=161
  CTRL_D=162;CTRL_G=163
  ALT_LEFT=164;ALT_GR=165
  #D'autres touches
  DOLLARS=186
  EQUAL=187
  FLOAT=188
  SEMICOLON=190#";"
  COLON=191#":"
  PERCENT=192#% ou ù
  CLOSE_PARENTHESIS=219
  MICRO=220# * ou µ
  CIRCUMFLEX=221#"^"
  SQUARED=222
  EXCLAMATION=223
  HIGHER=226#">" ou "<"
  FN=225
  #=============#
  #mise a jours   #
  #=============#
  def self.update
    @press_old=@press unless @press.nil?
    just_trigger
    just_press
  end
  def self.just_trigger
    @trigger=[]
    for key in 0..255
      @trigger.push(key) if @trigger_api.call(key) & 0x01 == 1
    end
  end
  def self.just_press
    @press=[]
    for key in 0..255
      @press.push(key) unless @press_api.call(key).between?(0, 1)
    end
  end
  def self.press?(key)
    return true if @press.include?(key)
    return false
  end
  def self.trigger?(key)
    return true if @trigger.include?(key)
    return false
  end
  def self.repeat?(key)
    return true if @press.push(key) and @press_old.include?(key) and @trigger.include?(key)
    return false
  end
  def self.dir4
    if @press.include?(DOWN)
        return 2
    elsif @press.include?(UP)
        return 8
    elsif @press.include?(RIGHT)
        return 6
    elsif @press.include?(LEFT)
      return 4
    else
      return 0
    end
  end
  def self.dir8
    if @press.include?(DOWN)
      if @press.include?(RIGHT)
        return 9
      elsif @press.include?(LEFT)
        return 1
      else
        return 2
      end
    elsif @press.include?(UP)
      if @press.include?(RIGHT)
        return 7
      elsif @press.include?(LEFT)
        return 3
      else
        return 8
      end
    elsif @press.include?(RIGHT)
      return 6
    elsif @press.include?(LEFT)
      return 4
    else
      return 0
    end
  end
end

Module Input avec module RMXP

Code:
#==================#
#Module Input  v0.5#
#==================#
module Input
  @trigger_api=Win32API.new("user32","GetAsyncKeyState",['i'],'i')
  @press_api=Win32API.new("user32","GetKeyState",['i'],'i')
  #==============================#
  #initialisation des constantes #
  #==============================#
  #Souris
  MOUSE_LEFT=1;MOUSE_RIGHT=2;MOUSE_CENTER=4
  #touches sur les coté
  BACKSPACE=8#la touche <=
  TAB=9
  ENTER=13
  SHIFT=16;CTRL=17;ALT=18
  PAUSE=19
  LOCK_MAJ=20
  ESC=27#ECHAP
  #espace
  SPACE=32
  #pages
  PAGE_DOWN=33;PAGE_UP=34;FIN=35;HOME=36
  #Directions
  LEFT=37;UP=38;RIGHT=39;DOWN=40
  #autre fonctions
  PRT_SC=44;INSERT=45;DELETE=46
  #Chiffres au dessus
  AN_0=48;AN_1=49;AN_2=50;AN_3=51;AN_4=52
  AN_5=53;AN_6=54;AN_7=55;AN_8=56;AN_9=57
  #Alphabet
  A=65;B=66;C=67;D=68;E=69;F=70;G=71;H=72;I=73;J=74;K=75;L=76;M=77;N=78;O=79
  P=80;Q=81;R=82;S=83;T=84;U=85;V=86;W=87;X=88;Y=89;Z=90;WINDOWS=91;MOUSE_MENU=93
  #Pavé numérique
  N_0=96;N_1=97;N_2=98;N_3=99;N_4=100
  N_5=101;N_6=102;N_7=103;N_8=104;N_9=105
  #operations
  MULT=106;PLUS=107;MOIN=109;DECI=110;DIVI=111
  #Touches Fonction
  F1=112;F2=113;F3=114;F4=115;F5=116;F6=117
  F7=118;F8=119;F9=120;F10=121;F11=122;F12=123
  #d'autres fonctions
  LOCK_NUM=144
  SHIFT_LEFT=160;SHIFT_RIGHT=161
  CTRL_D=162;CTRL_G=163
  ALT_LEFT=164;ALT_GR=165
  #D'autres touches
  DOLLARS=186
  EQUAL=187
  FLOAT=188
  SEMICOLON=190#";"
  COLON=191#":"
  PERCENT=192#% ou ù
  CLOSE_PARENTHESIS=219
  MICRO=220# * ou µ
  CIRCUMFLEX=221#"^"
  SQUARED=222
  EXCLAMATION=223
  HIGHER=226#">" ou "<"
  FN=225
  #
  #module RMXP
  #
  module RMXP
    C=[Input::C,Input::SPACE,Input::ENTER]
    B=[Input::ESC,Input::N_0,Input::X]
    A=[Input::SHIFT,Input::Z]
    X=[Input::X]
    Y=[Input::S]
    Z=[Input::D]
    L=[Input::Q]
    R=[Input::W]
    def self.press?(key)
      @press=Input.get_press
      for i in key
        return true if @press.include?(i)
      end
      return false
    end
    def self.trigger?(key)
      @trigger=Input.get_trigger
      for i in key
        return true if @trigger.include?(i)
      end
      return false
    end
    def self.repeat?(key)
      @trigger=Input.get_trigger
      @press=Input.get_press
      @press_old=Input.get_press_old
      for i in key
        return true if @press.push(i) and @press_old.include?(i) and @trigger.include?(i)
      end
      return false
    end
  end
  #=============#
  #mise a jours #
  #=============#
  def self.update
    @press_old=@press unless @press.nil?
    just_trigger
    just_press
  end
  def self.get_press
    return @press
  end
  def self.get_trigger
    return @trigger
  end
  def self.get_press_old
    return @press_old
  end
  def self.just_trigger
    @trigger=[]
    for key in 0..255
      @trigger.push(key) if @trigger_api.call(key) & 0x01 == 1
    end
  end
  def self.just_press
    @press=[]
    for key in 0..255
      @press.push(key) unless @press_api.call(key).between?(0, 1)
    end
  end
  def self.press?(key)
    return true if @press.include?(key)
    return false
  end
  def self.trigger?(key)
    return true if @trigger.include?(key)
    return false
  end
  def self.repeat?(key)
    return true if @press.push(key) and @press_old.include?(key) and @trigger.include?(key)
    return false
  end
  def self.dir4
    if @press.include?(DOWN)
        return 2
    elsif @press.include?(UP)
        return 8
    elsif @press.include?(RIGHT)
        return 6
    elsif @press.include?(LEFT)
      return 4
    else
      return 0
    end
  end
  def self.dir8
    if @press.include?(DOWN)
      if @press.include?(RIGHT)
        return 9
      elsif @press.include?(LEFT)
        return 1
      else
        return 2
      end
    elsif @press.include?(UP)
      if @press.include?(RIGHT)
        return 7
      elsif @press.include?(LEFT)
        return 3
      else
        return 8
      end
    elsif @press.include?(RIGHT)
      return 6
    elsif @press.include?(LEFT)
      return 4
    else
      return 0
    end
  end
end


Utilisation du module input v0.4


L'utilisation est la même que pour le module input deja intégré dans RGSS100j.dll sauf que la touche C est la touche C pas la touche Entré ou Espace et ainsi de suite pour les autres touches donc quand vous tappez :
Code:

if Input.press?(Input::B)
#instructions
end

Vous devrez appuyer sur B et pas sur X.

Utilisation du module input v0.5


Dans la version 0.5 il y a le module RMXP.
Ce module sert a copier ce que le RGSS player fait.
Module RMXP a écrit:

module RMXP
C=[Input::C,Input::SPACE,Input::ENTER]


Pour la touche C on as defini C,Espace et Entré comme dans le RGSS player.
Après pour utiliser la touche C comme dans le RGSS palyer vous tapez :
Code:
Input.update
if Input::RMXP.press?(Input::RMXP::C)
#instructions
end


Après si vous voulez changer les touches dans le module RMXP vous modifier la constant de votre choix comme avec toute les autres variables exemple
Code:
module RMXP
C=[Input::T,Input::Enter,Input::N_5,Input::N_1]


Voilà.

Posté par Moy le 31 Aoû - 19:22 (2010)
on peut pas partir de la première page :shock:  aucune touche ne fonctionne :(

Posté par Nuri Yuri le 31 Aoû - 19:47 (2010)
Il fonctionne ...
Edit :
Prend le script a jour car il as subit un passage vers la version 0.4 et il est plus stable Imbécile heureux

Posté par Evilmad le 1 Sep - 01:05 (2010)
Tu as fait ça juste au moment où j'en avait le plus besoin mais j'en ai trouvé un mieux auquel j'ai ajouté la reconnaissance de la souris, d'autant plus que j'ai les mêmes touches que d'habitude mais c'est bien d'avoir fait ce script tout de même .

Posté par RevengeOfShadow le 30 Sep - 19:04 (2010)
Pourrais-tu partager ? Car celui de Yourii bug; seul C fonctionne sur la config C et seul B fonctionne pour la config B et non ENTREE/ECHAP !

EDIT: J'ai modifié un peu celui de Youri pour que les touches standard de RMXP soient OK. Echap = B, Enter = C, A = A dans cette version :

 
Code:
     #==================#  
    #Module Input  v0.5#  
    #==================#  
    module Input  
      @trigger_api=Win32API.new("user32","GetAsyncKeyState",['i'],'i')  
      @press_api=Win32API.new("user32","GetKeyState",['i'],'i')  
      #==============================#  
      #initialisation des constantes #  
      #==============================#  
      #Souris  
      MOUSE_LEFT=1;MOUSE_RIGHT=2;MOUSE_CENTER=4  
      #touches sur les coté   
      BACKSPACE=8#la touche <=  
      TAB=9  
      ENTER=67
      SHIFT=88;CTRL=17;ALT=18  
      PAUSE=19  
      LOCK_MAJ=20  
      ESC=66#ECHAP  
      #espace  
      SPACE=32  
      #pages  
      PAGE_DOWN=33;PAGE_UP=34;FIN=35;HOME=36  
      #Directions  
      LEFT=37;UP=38;RIGHT=39;DOWN=40  
      #autre fonctions  
      PRT_SC=44;INSERT=45;DELETE=46  
      #Chiffres au dessus  
      AN_0=48;AN_1=49;AN_2=50;AN_3=51;AN_4=52  
      AN_5=53;AN_6=54;AN_7=55;AN_8=56;AN_9=57  
      #Alphabet  
      A=88;B=27;C=13;D=68;E=69;F=70;G=71;H=72;I=73;J=74;K=75;L=76;M=77;N=78;O=79  
      P=80;Q=81;R=82;S=83;T=84;U=85;V=86;W=87;X=65;Y=89;Z=90;WINDOWS=91;MOUSE_MENU=93  
      #Pavé numérique  
      N_0=96;N_1=97;N_2=98;N_3=99;N_4=100  
      N_5=101;N_6=102;N_7=103;N_8=104;N_9=105  
      #operations  
      MULT=106;PLUS=107;MOIN=109;DECI=110;DIVI=111  
      #Touches Fonction  
      F1=112;F2=113;F3=114;F4=115;F5=116;F6=117  
      F7=118;F8=119;F9=120;F10=121;F11=122;F12=123  
      #d'autres fonctions  
      LOCK_NUM=144  
      SHIFT_LEFT=160;SHIFT_RIGHT=161  
      CTRL_D=162;CTRL_G=163  
      ALT_LEFT=164;ALT_GR=165  
      #D'autres touches  
      DOLLARS=186  
      EQUAL=187  
      FLOAT=188  
      SEMICOLON=190#";"  
      COLON=191#":"  
      PERCENT=192#% ou ù  
      CLOSE_PARENTHESIS=219  
      MICRO=220# * ou µ  
      CIRCUMFLEX=221#"^"  
      SQUARED=222  
      EXCLAMATION=223  
      HIGHER=226#">" ou "<"  
      FN=225  
      #  
      #module RMXP  
      #  
      module RMXP  
        C=[Input::C,Input::SPACE,Input::ENTER]  
        B=[Input::ESC,Input::N_0,Input::X]  
        A=[Input::SHIFT,Input::Z]  
        X=[Input::X]  
        Y=[Input::S]  
        Z=[Input::D]  
        L=[Input::Q]  
        R=[Input::W]  
        def self.press?(key)  
          @press=Input.get_press  
          for i in key  
            return true if @press.include?(i)  
          end  
          return false  
        end  
        def self.trigger?(key)  
          @trigger=Input.get_trigger  
          for i in key  
            return true if @trigger.include?(i)  
          end  
          return false  
        end  
        def self.repeat?(key)  
          @trigger=Input.get_trigger  
          @press=Input.get_press  
          @press_old=Input.get_press_old  
          for i in key  
            return true if @press.push(i) and @press_old.include?(i) and @trigger.include?(i)  
          end  
          return false  
        end  
      end  
      #=============#  
      #mise a jours #  
      #=============#  
      def self.update  
        @press_old=@press unless @press.nil?  
        just_trigger  
        just_press  
      end  
      def self.get_press  
        return @press  
      end  
      def self.get_trigger  
        return @trigger  
      end  
      def self.get_press_old  
        return @press_old  
      end  
      def self.just_trigger  
        @trigger=[]  
        for key in 0..255  
          @trigger.push(key) if @trigger_api.call(key) & 0x01 == 1  
        end  
      end  
      def self.just_press  
        @press=[]  
        for key in 0..255  
          @press.push(key) unless @press_api.call(key).between?(0, 1)  
        end  
      end  
      def self.press?(key)  
        return true if @press.include?(key)  
        return false  
      end  
      def self.trigger?(key)  
        return true if @trigger.include?(key)  
        return false  
      end  
      def self.repeat?(key)  
        return true if @press.push(key) and @press_old.include?(key) and @trigger.include?(key)  
        return false  
      end  
      def self.dir4  
        if @press.include?(DOWN)  
            return 2  
        elsif @press.include?(UP)  
            return 8  
        elsif @press.include?(RIGHT)  
            return 6  
        elsif @press.include?(LEFT)  
          return 4  
        else  
          return 0  
        end  
      end  
      def self.dir8  
        if @press.include?(DOWN)  
          if @press.include?(RIGHT)  
            return 9  
          elsif @press.include?(LEFT)  
            return 1  
          else  
            return 2  
          end  
        elsif @press.include?(UP)  
          if @press.include?(RIGHT)  
            return 7  
          elsif @press.include?(LEFT)  
            return 3  
          else  
            return 8  
          end  
        elsif @press.include?(RIGHT)  
          return 6  
        elsif @press.include?(LEFT)  
          return 4  
        else  
          return 0  
        end  
      end  
    end 

Pas de crédits nécessaires pour moi.