🤔 Para Refletir :
"O segredo para desenvolver ótimos jogos é... ahm... bom, se eu contasse, não seria mais segredo."
- Jazz

Como fazer mouse interagir com um evento usando esse Modulo de mouse

Estado
Tópico fechado. Não é possível fazer postagens nela.

sir helix

Cidadão
Membro
Membro
Juntou-se
30 de Julho de 2015
Postagens
198
Bravecoins
0
titulo auto-explicativo
modulo:
#==============================================================================
# Módulo de Mouse - Masked
#
# Funções:
# * Mouse.position  : Retorna a posição do mouse na janela no formato [x,y]
# * Mouse.X_trigger? : Verifica se o botão X do mouse foi clicado
# * Mouse.X_repeat?  : Verifica se o botão X do mouse foi clicado e pressionado
# * Mouse.X_press?  : Verifica se o botão X do mouse foi pressionado
# X deve ser right (para o botão direito) ou left (para o esquerdo)
#
#==============================================================================
#==============================================================================
# ** Mouse
#==============================================================================
module Mouse

  #--------------------------------------------------------------------------
  # > Funções do Win32API
  #--------------------------------------------------------------------------
  # Posição do cursor na tela
  GetCursorPos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
  # Handle da janela ativa
  GetActiveWindow = Win32API.new('user32', 'GetActiveWindow', 'v', 'l')
  # Cordenada da tela para o cliente (janela)
  ScreenToClient = Win32API.new('user32', 'ScreenToClient', 'lp', 'i')
  # Estado de tecla (cliques)
  GetKeyState = Win32API.new('user32', 'GetAsyncKeyState', 'i', 'i')

  #--------------------------------------------------------------------------
  # > Códigos de tecla virtual
  #--------------------------------------------------------------------------
  VK_LBUTTON = 0x1  # Botão esquerdo do mouse
  VK_RBUTTON = 0x2  # Botão direito do mouse

  # Variáveis de classe
  @@__trigger = []
  @@__index = []

  extend self

  #--------------------------------------------------------------------------
  # * Obtém a posição do mouse na janela
  #--------------------------------------------------------------------------
  def position
    buffer = "\0" * 8
    GetCursorPos.call(buffer)
    hWnd = GetActiveWindow.call
    ScreenToClient.call(hWnd, buffer)
    point = buffer.unpack('S*')
    return [point[0], point[2]]
  end
  #--------------------------------------------------------------------------
  # ...
  #--------------------------------------------------------------------------
  def __press?(code)
    return GetKeyState.call(code) != 0
  end
  private :__press?
  #--------------------------------------------------------------------------
  # * Verifica se o botão esquerdo está pressionado
  #--------------------------------------------------------------------------
  def left_press?
    return __press?(VK_LBUTTON)
  end
  #--------------------------------------------------------------------------
  # * Verifica se o botão direito está pressionado
  #--------------------------------------------------------------------------
  def right_press?
    return __press?(VK_RBUTTON)
  end
  #--------------------------------------------------------------------------
  # ...
  #--------------------------------------------------------------------------
  def __trigger?(code)
    unless GetKeyState.call(code) == 0
    @@__trigger.include?(code) ? (return false) : @@__trigger.push(code)
    return true
    else
      @@__trigger.delete(code) if @@__trigger.include?(code)
      return false
    end
  end
  private :__trigger?
  #--------------------------------------------------------------------------
  # * Verifica se o botão esquerdo foi clicado
  #--------------------------------------------------------------------------
  def left_trigger?
    return __trigger?(VK_LBUTTON)
  end
  #--------------------------------------------------------------------------
  # * Verifica se o botão direito foi clicado
  #--------------------------------------------------------------------------
  def right_trigger?
    return __trigger?(VK_RBUTTON)
  end
  #--------------------------------------------------------------------------
  # ...
  #--------------------------------------------------------------------------
  def __repeat?(code)
    unless GetKeyState.call(code) == 0
      @@__trigger.push(code) unless @@__trigger.include?(code)
      index = @@__trigger.index(code)
      @@__index[index] = 0 unless @@__index[index]
      @@__index[index] += 1
      return true if @@__index[index] == 1
      @@__index[index] >= 30 && @@__index[index] % 4 == 1 ? (return true) : (return false)
    else
      index = @@__trigger.index(code) if @@__trigger.include?(code)
      @@__index[index] = nil if index
    end
  end
  private :__repeat?
  #--------------------------------------------------------------------------
  # * Verifica se o botão esquerdo foi clicado e pressionado
  #--------------------------------------------------------------------------
  def left_repeat?
    return __repeat?(VK_LBUTTON)
  end
  #--------------------------------------------------------------------------
  # * Verifica se o botão direito foi clicado e pressionado
  #--------------------------------------------------------------------------
  def right_repeat?
    return __repeat?(VK_RBUTTON)
  end


    end
 
Alteração:

Agora pode adquirir a posição X e Y dos eventos em variáveis e comparar para fazer condições.



Código:
#==============================================================================
# Módulo de Mouse - Masked
#
# Funções:
# * Mouse.positionx   : Retorna a posição do mouse na janela no formato [x]
# * Mouse.positiony   : Retorna a posição do mouse na janela no formato [y]
# * Mouse.X_trigger? : Verifica se o botão X do mouse foi clicado
# * Mouse.X_repeat?  : Verifica se o botão X do mouse foi clicado e pressionado
# * Mouse.X_press?   : Verifica se o botão X do mouse foi pressionado
# X deve ser right (para o botão direito) ou left (para o esquerdo)
#
#==============================================================================
#==============================================================================
# ** Mouse
#==============================================================================
module Mouse
 
  #--------------------------------------------------------------------------
  # > Funções do Win32API
  #--------------------------------------------------------------------------
  # Posição do cursor na tela
  GetCursorPos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
  # Handle da janela ativa
  GetActiveWindow = Win32API.new('user32', 'GetActiveWindow', 'v', 'l')
  # Cordenada da tela para o cliente (janela)
  ScreenToClient = Win32API.new('user32', 'ScreenToClient', 'lp', 'i')
  # Estado de tecla (cliques)
  GetKeyState = Win32API.new('user32', 'GetAsyncKeyState', 'i', 'i')
 
  #--------------------------------------------------------------------------
  # > Códigos de tecla virtual
  #--------------------------------------------------------------------------
  VK_LBUTTON = 0x1  # Botão esquerdo do mouse
  VK_RBUTTON = 0x2  # Botão direito do mouse
 
  # Variáveis de classe
  @@__trigger = []
  @@__index = []
 
  extend self
 
  #--------------------------------------------------------------------------
  # * Obtém a posição do mouse na janela
  #--------------------------------------------------------------------------
  def positionx
    buffer = "\0" * 8
    GetCursorPos.call(buffer)
    hWnd = GetActiveWindow.call
    ScreenToClient.call(hWnd, buffer)
    point = buffer.unpack('S*')
    return point[0]/32
end
  def positiony
    buffer = "\0" * 8
    GetCursorPos.call(buffer)
    hWnd = GetActiveWindow.call
    ScreenToClient.call(hWnd, buffer)
    point = buffer.unpack('S*')
    return point[2]/32
  end
  #--------------------------------------------------------------------------
  # ...
  #--------------------------------------------------------------------------
  def __press?(code)
    return GetKeyState.call(code) != 0
  end
  private :__press?
  #--------------------------------------------------------------------------
  # * Verifica se o botão esquerdo está pressionado
  #--------------------------------------------------------------------------
  def left_press?
    return __press?(VK_LBUTTON)
  end
  #--------------------------------------------------------------------------
  # * Verifica se o botão direito está pressionado
  #--------------------------------------------------------------------------
  def right_press?
    return __press?(VK_RBUTTON)
  end
  #--------------------------------------------------------------------------
  # ...
  #--------------------------------------------------------------------------
  def __trigger?(code)
    unless GetKeyState.call(code) == 0
     @@__trigger.include?(code) ? (return false) : @@__trigger.push(code)
     return true
    else
      @@__trigger.delete(code) if @@__trigger.include?(code)
      return false
    end
  end
  private :__trigger?
  #--------------------------------------------------------------------------
  # * Verifica se o botão esquerdo foi clicado
  #--------------------------------------------------------------------------
  def left_trigger?
    return __trigger?(VK_LBUTTON)
  end
  #--------------------------------------------------------------------------
  # * Verifica se o botão direito foi clicado
  #--------------------------------------------------------------------------
  def right_trigger?
    return __trigger?(VK_RBUTTON)
  end
  #--------------------------------------------------------------------------
  # ...
  #--------------------------------------------------------------------------
  def __repeat?(code)
    unless GetKeyState.call(code) == 0
      @@__trigger.push(code) unless @@__trigger.include?(code)
      index = @@__trigger.index(code)
      @@__index[index] = 0 unless @@__index[index]
      @@__index[index] += 1
      return true if @@__index[index] == 1
      @@__index[index] >= 30 && @@__index[index] % 4 == 1 ? (return true) : (return false)
    else
      index = @@__trigger.index(code) if @@__trigger.include?(code)
      @@__index[index] = nil if index
    end
  end
  private :__repeat?
  #--------------------------------------------------------------------------
  # * Verifica se o botão esquerdo foi clicado e pressionado
  #--------------------------------------------------------------------------
  def left_repeat?
    return __repeat?(VK_LBUTTON)
  end
  #--------------------------------------------------------------------------
  # * Verifica se o botão direito foi clicado e pressionado
  #--------------------------------------------------------------------------
  def right_repeat?
    return __repeat?(VK_RBUTTON)
  end
 

    end
 
Estado
Tópico fechado. Não é possível fazer postagens nela.
Voltar
Topo Inferior