Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP] Módulos de Ratón y Teclado

Ver el tema anterior Ver el tema siguiente Ir abajo

[RMXP] Módulos de Ratón y Teclado

Mensaje por Ribbu el 2009-07-06, 14:07

Descripción:

Como dice el título.

Script:

Módulo Ratón:

Código:
#==============================================================================
# ** Mouse Input Module
#------------------------------------------------------------------------------
# Near Fantastica
# Version 5
# 01.03.06
#------------------------------------------------------------------------------
# This module defines mouse input
#==============================================================================

module Mouse
@position
GSM = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
Cursor_Pos= Win32API.new('user32', 'GetCursorPos', 'p', 'i')
Scr2cli = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
Client_rect = Win32API.new('user32', 'GetClientRect', %w(l p), 'i')
Readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
Findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
#-------------------------------------------------------------------------- 
def Mouse.grid
  return nil if @pos == nil
  offsetx = $game_map.display_x / 4
  offsety = $game_map.display_y / 4
  x = (@pos[0] + offsetx) / 32
  y = (@pos[1] + offsety) / 32
  return [x, y]
end
#-------------------------------------------------------------------------- 
def Mouse.position
  return @pos == nil ? [0, 0] : @pos
end
#-------------------------------------------------------------------------- 
def Mouse.global_pos
  pos = [0, 0].pack('ll')
  if Cursor_Pos.call(pos) != 0
    return pos.unpack('ll')
  else
    return nil
  end
end
#-------------------------------------------------------------------------- 
def Mouse.pos
  x, y = Mouse.screen_to_client(*Mouse.global_pos)
  width, height = Mouse.client_size
  begin
    if (x >= 0 and y >= 0 and x < width and y < height)
      return x, y
    else
      return nil
    end
  rescue
    return nil
  end
end
#-------------------------------------------------------------------------- 
def Mouse.update
  @pos = Mouse.pos
end
#-------------------------------------------------------------------------- 
def Mouse.screen_to_client(x, y)
  return nil unless x and y
  pos = [x, y].pack('ll')
  if Scr2cli.call(Mouse.hwnd, pos) != 0
    return pos.unpack('ll')
  else
    return nil
  end
end
#-------------------------------------------------------------------------- 
def Mouse.hwnd
  game_name = "\0" * 256
  Readini.call('Game','Title','',game_name,255,".\\Game.ini")
  game_name.delete!("\0")
  return Findwindow.call('RGSS Player',game_name)
end
#-------------------------------------------------------------------------- 
def Mouse.client_size
  rect = [0, 0, 0, 0].pack('l4')
  Client_rect.call(Mouse.hwnd, rect)
  right, bottom = rect.unpack('l4')[2..3]
  return right, bottom
end
end

Módulo Teclado:

Código:
#==============================================================================
# ** Keyboard Input Module
#==============================================================================
# Near Fantastica
# Version 5
# 29.11.05
#==============================================================================
# The Keyboard Input Module is designed to function as the default Input module
# dose. It is better then other methods keyboard input because as a key is
# tested it is not removed form the list. so you can test the same key multiple
# times the same loop.
#==============================================================================



module Keyboard
  #--------------------------------------------------------------------------
  @keys = []
  @pressed = []
  Mouse_Left = 1
  Mouse_Right = 2
  Back= 8
  Tab = 9
  Enter = 13
  Shift = 16
  Ctrl = 17
  Alt = 18
  Esc = 27
  Space = 32
  Numberkeys = {}
  Numberkeys[0] = 48
  Numberkeys[1] = 49
  Numberkeys[2] = 50
  Numberkeys[3] = 51
  Numberkeys[4] = 52
  Numberkeys[5] = 53
  Numberkeys[6] = 54
  Numberkeys[7] = 55
  Numberkeys[8] = 56
  Numberkeys[9] = 57
  Numberpad = {}
  Numberpad[0] = 45
  Numberpad[1] = 35
  Numberpad[2] = 40
  Numberpad[3] = 34
  Numberpad[4] = 37
  Numberpad[5] = 12
  Numberpad[6] = 39
  Numberpad[7] = 36
  Numberpad[8] = 38
  Numberpad[9] = 33
  Letters = {}
  Letters["A"] = 65
  Letters["B"] = 66
  Letters["C"] = 67
  Letters["D"] = 68
  Letters["E"] = 69
  Letters["F"] = 70
  Letters["G"] = 71
  Letters["H"] = 72
  Letters["I"] = 73
  Letters["J"] = 74
  Letters["K"] = 75
  Letters["L"] = 76
  Letters["M"] = 77
  Letters["N"] = 78
  Letters["O"] = 79
  Letters["P"] = 80
  Letters["Q"] = 81
  Letters["R"] = 82
  Letters["S"] = 83
  Letters["T"] = 84
  Letters["U"] = 85
  Letters["V"] = 86
  Letters["W"] = 87
  Letters["X"] = 88
  Letters["Y"] = 89
  Letters["Z"] = 90
  Fkeys = {}
  Fkeys[1] = 112
  Fkeys[2] = 113
  Fkeys[3] = 114
  Fkeys[4] = 115
  Fkeys[5] = 116
  Fkeys[6] = 117
  Fkeys[7] = 118
  Fkeys[8] = 119
  Fkeys[9] = 120
  Fkeys[10] = 121
  Fkeys[11] = 122
  Fkeys[12] = 123
  Collon = 186
  Equal = 187
  Comma = 188
  Underscore = 189
  Dot = 190
  Backslash = 191
  Lb = 219
  Rb = 221
  Quote = 222
  State = Win32API.new("user32","GetKeyState",['i'],'i')
  Key = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
  #-------------------------------------------------------------------------- 
  def Keyboard.getstate(key)
    return true unless State.call(key).between?(0, 1)
    return false
  end
  #--------------------------------------------------------------------------
  def Keyboard.testkey(key)
    Key.call(key) & 0x01 == 1
  end
  #--------------------------------------------------------------------------
  def Keyboard.update
    @keys = []
    @keys.push(Keyboard::Mouse_Left) if Keyboard.testkey(Keyboard::Mouse_Left)
    @keys.push(Keyboard::Mouse_Right) if Keyboard.testkey(Keyboard::Mouse_Right)
    @keys.push(Keyboard::Back) if Keyboard.testkey(Keyboard::Back)
    @keys.push(Keyboard::Tab) if Keyboard.testkey(Keyboard::Tab)
    @keys.push(Keyboard::Enter) if Keyboard.testkey(Keyboard::Enter)
    @keys.push(Keyboard::Shift) if Keyboard.testkey(Keyboard::Shift)
    @keys.push(Keyboard::Ctrl) if Keyboard.testkey(Keyboard::Ctrl)
    @keys.push(Keyboard::Alt) if Keyboard.testkey(Keyboard::Alt)
    @keys.push(Keyboard::Esc) if Keyboard.testkey(Keyboard::Esc)
    @keys.push(Keyboard::Space) if Keyboard.testkey(Keyboard::Space)
    for key in Keyboard::Numberkeys.values
      @keys.push(key) if Keyboard.testkey(key)
    end
    for key in Keyboard::Numberpad.values
      @keys.push(key) if Keyboard.testkey(key)
    end
    for key in Keyboard::Letters.values
      @keys.push(key) if Keyboard.testkey(key)
    end
    for key in Keyboard::Fkeys.values
      @keys.push(key) if Keyboard.testkey(key)
    end
    @keys.push(Keyboard::Collon) if Keyboard.testkey(Keyboard::Collon)
    @keys.push(Keyboard::Equal) if Keyboard.testkey(Keyboard::Equal)
    @keys.push(Keyboard::Comma) if Keyboard.testkey(Keyboard::Comma)
    @keys.push(Keyboard::Underscore) if Keyboard.testkey(Keyboard::Underscore)
    @keys.push(Keyboard::Dot) if Keyboard.testkey(Keyboard::Dot)
    @keys.push(Keyboard::Backslash) if Keyboard.testkey(Keyboard::Backslash)
    @keys.push(Keyboard::Lb) if Keyboard.testkey(Keyboard::Lb)
    @keys.push(Keyboard::Rb) if Keyboard.testkey(Keyboard::Rb)
    @keys.push(Keyboard::Quote) if Keyboard.testkey(Keyboard::Quote)
    @pressed = []
    @pressed.push(Keyboard::Mouse_Left) if Keyboard.getstate(Keyboard::Mouse_Left)
    @pressed.push(Keyboard::Mouse_Right) if Keyboard.getstate(Keyboard::Mouse_Right)
    @pressed.push(Keyboard::Back) if Keyboard.getstate(Keyboard::Back)
    @pressed.push(Keyboard::Tab) if Keyboard.getstate(Keyboard::Tab)
    @pressed.push(Keyboard::Enter) if Keyboard.getstate(Keyboard::Enter)
    @pressed.push(Keyboard::Shift) if Keyboard.getstate(Keyboard::Shift)
    @pressed.push(Keyboard::Ctrl) if Keyboard.getstate(Keyboard::Ctrl)
    @pressed.push(Keyboard::Alt) if Keyboard.getstate(Keyboard::Alt)
    @pressed.push(Keyboard::Esc) if Keyboard.getstate(Keyboard::Esc)
    @pressed.push(Keyboard::Space) if Keyboard.getstate(Keyboard::Space)
    for key in Keyboard::Numberkeys.values
      @pressed.push(key) if Keyboard.getstate(key)
    end
    for key in Keyboard::Numberpad.values
      @pressed.push(key) if Keyboard.getstate(key)
    end
    for key in Keyboard::Letters.values
      @pressed.push(key) if Keyboard.getstate(key)
    end
    for key in Keyboard::Fkeys.values
      @pressed.push(key) if Keyboard.getstate(key)
    end
    @pressed.push(Keyboard::Collon) if Keyboard.getstate(Keyboard::Collon)
    @pressed.push(Keyboard::Equal) if Keyboard.getstate(Keyboard::Equal)
    @pressed.push(Keyboard::Comma) if Keyboard.getstate(Keyboard::Comma)
    @pressed.push(Keyboard::Underscore) if Keyboard.getstate(Keyboard::Underscore)
    @pressed.push(Keyboard::Dot) if Keyboard.getstate(Keyboard::Dot)
    @pressed.push(Keyboard::Backslash) if Keyboard.getstate(Keyboard::Backslash)
    @pressed.push(Keyboard::Lb) if Keyboard.getstate(Keyboard::Lb)
    @pressed.push(Keyboard::Rb) if Keyboard.getstate(Keyboard::Rb)
    @pressed.push(Keyboard::Quote) if Keyboard.getstate(Keyboard::Quote) 
  end
  #--------------------------------------------------------------------------
  def Keyboard.trigger?(key)
    return true if @keys.include?(key)
    return false
  end
  #--------------------------------------------------------------------------
  def Keyboard.pressed?(key)
    return true if @pressed.include?(key)
    return false
  end
end

Compatibilidad:

Es compatible con el SDK (1.5) pero se le puede eliminar.

Créditos:

Scripts creados por Near Fantastica.

_________________
¡DESCARGA ARRYN!
avatar
Ribbu
Administrador
Administrador



Créditos 10084

Gracias : 90

Volver arriba Ir abajo

Re: [RMXP] Módulos de Ratón y Teclado

Mensaje por Invitado el 2010-03-01, 08:38

lo intente pero sigue sin salirme (lo de mover con click de mouse el personaje estilo lineage)

TE EXPLICO CON DETALLES LO QUE E ECHO ASI NO TE AGO PERDER MAS EL TIEMPO:

1: descargue de "ACA" que es tu posteo el SDK v2.4 y me llevo a "ACA" donde vei todo ese codigo laaargo.

2: entre a un proyecto nuevo entre a sript cree un script sobre main llamado SDK, y ahi pege todo ese script laargo.

3: cree un script llamado mov. mouse y en el copie el codigo de Módulo Ratón (ESTE LO CREE DEBAJO DE SDK Y ARRIBA DE MAIN.

4: probe, y entraba pero no funcinaba con el mouse sige fucionando con las flechas.

ACLARACION: PROBE PONER TAMBIEN EL SCRIPT DE TECLADO JUNTO AL DE MOUSE OSEA LOS DOS SCRIPT EN LA LISTA Y NO PASA NADA TAMPOCO.

DESDE YA MCUHISIMAS GRACIAS! Cool

Invitado
Invitado


Volver arriba Ir abajo

Re: [RMXP] Módulos de Ratón y Teclado

Mensaje por EspectroW el 2018-06-30, 02:34

Disculpen. No entiendo como usarlo.

Como se llama desde un script para que detecte la tecla "I" por ejemplo.

Gracias.
avatar
EspectroW
Iniciado
Iniciado

0/3

Créditos 17

Gracias : 3

Volver arriba Ir abajo

Re: [RMXP] Módulos de Ratón y Teclado

Mensaje por Wecoc el 2018-06-30, 16:53

Como se llama desde un script para que detecte la tecla "I" por ejemplo.

Se usa [line]Keyboard.trigger?(key)[/line] donde key es el código de esa tecla. Puedes buscar los códigos ASCI de cada tecla o bien mejor si es una de las que están definidas al principio del script usar eso.

Por ejemplo para la tecla I: [line]Keyboard.trigger?(Keyboard::Letters["I"])[/line]

Igualmente debo decir que ese script es de 2005 y actualmente hay opciones más completas.
Uno de los más usados actualmente es el Glitchfinder's Key Input Module junto con su Mouse Input Module

PD. Te agradeceré que a partir de ahora por favor procures no postear a topics tan viejos, porque se considera necropost. Sé que era para resolver una duda pero igualmente ten en cuenta las normas del foro.
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

Re: [RMXP] Módulos de Ratón y Teclado

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.