O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Gab Abstract Mouse

Iniciado por Raizen, 18/12/2012 às 20:04

[box class=catbg2]
Gab Mouse Abstract Module
[/box]

[box class=catbg]Introdução:[/box]
[box class=randomquote]Script útil apenas para desenvolvedores
Script funciona também no RMXP e no RMVX

     Bem, motivado por um pedido de leitura de alguns pontos do Mouse, trabalhei esse módulo, que adquire informações de posição do cursor, clique, pressionamento e repetição de teclas, mesmo a 4ª e 5ª tecla, que são, geralmente, encontradas em mouses gamer.
[/box]

[box class=catbg]Características:[/box]
[box class=randomquote]- Plug 'n use. (Não seria plug 'n Play por que o módulo não faz nada só dentro do projeto)
- Detecção de Posição do cursor
- Captura de clique
- Captura de pressionamento
- Captura de repetição
- Suporte até 5 teclas
[/box]

[box class=catbg]Screenshots:[/box]
[box class=randomquote]Não perceptível por imagens
[/box]

[box class=catbg]Como usar:[/box]
[box class=randomquote]
Mouse.update                # Atualização
Mouse.pos                   # Array [Pos x, Pos y]
Mouse.click?(Mouse::LEFT)   # Clique com botão esquerdo?
Mouse.press?(Mouse::SCROLL) # Pressionando scroll?
Mouse.repeat?(Mouse::RIGHT) # Repetindo botão direito?


Constantes possíveis para as teclas estão incluídas no header do script.
O Mouse::update deve ser chamado uma vez por frame para garantir bom funcionamento.
[/box]

[box class=catbg]Script:[/box]
[box class=randomquote]
#==============================================================================#
# Gab Mouse Abstract Module                                                    #
# Autor: Gab!                                                                  #
# Data:  13/03/2012                                                            #
#==============================================================================#
# Classe abstrata para adquirir informações do mouse, sendo elas:              #
# - Posição                                                                    #
# - Clique                                                                     #
# - Pressionamento                                                             #
# - Repetição                                                                  #
#                                                                              #
# Utilização:                                                                  #
#                                                                              #
# Mouse.update                # Atualização                                    #
# Mouse.pos                   # Array [Pos x, Pos y]                           #
# Mouse.click?(Mouse::LEFT)   # Clique com botão esquerdo?                     #
# Mouse.press?(Mouse::SCROLL) # Pressionando scroll?                           #
# Mouse.repeat?(Mouse::RIGHT) # Repetindo botão direito?                       #
#                                                                              #
# Constantes indicadores de teclas:                                            #
#                                                                              #
# Mouse::LEFT    - Botão esquerdo                                              #
# Mouse::RIGHT   - Botão direito                                               #
# Mouse::SCROLL  - Botão central                                               #
# Mouse::BUTTON4 - 4º Botão (Mouse Gamer)                                      #
# Mouse::BUTTON5 - 5º Botão (Mouse Gamer)                                      #
#==============================================================================#

module Mouse
  # Declarações de API
  GAME_WINDOW = Win32API.new("user32", "GetActiveWindow",  "v",  "l").call
  GET_RECT    = Win32API.new("user32", "GetWindowRect",    "lp", "l")
  CUR_POS     = Win32API.new("user32", "GetCursorPos",     "p",  "l")
  GET_CLICK   = Win32API.new("user32", "GetAsyncKeyState", "l",  "l")
  
  # Constantes
  LEFT    = 1
  RIGHT   = 2
  SCROLL  = 4
  BUTTON4 = 5
  BUTTON5 = 6
  
  # Auxiliar
  @state  = {LEFT => 0, RIGHT => 0, SCROLL => 0, BUTTON4 => 0, BUTTON5 => 0}
  
  # Métodos
  module_function
  
  # Atualização
  def update
    @state.each{|key, value| 
      @state[key] = (GET_CLICK.call(key) != 0 ? @state[key] + 1 : 0) 
      @state[key] = 15 if @state[key] == 17
    }
  end
  
  # Método para posição em relação à janela
  def pos
    buffer = [[0,0].pack("l*"), [0,0].pack("l*")]
   
    GET_RECT.call(GAME_WINDOW, buffer[0])
    CUR_POS.call(buffer[1])
   
    return buffer[1].unpack("l*").zip(buffer[0].unpack("l*")).map{|a, b| a - b}
  end
  
  # Click único
  def click?(button = LEFT)
    return @state[button] == 1
  end
  
  # Pressionado
  def press?(button = LEFT)
    return @state[button] > 0
  end
  
  # Repetindo
  def repeat?(button = LEFT)
    return @state[button] == 1 || @state[button] == 16
  end
end

[/box]

[box class=catbg]Créditos e Considerações finais:[/box]
[box class=randomquote][user]Gab![/user] - Criação do script
Qualquer dúvida de como usar, procurem ele no msn (gab.teles@hotmail.com) ou por PM.
[/box]

Infelizmente não entendi muito bem. .-.
Ele iria pegar a posição do mouse? Em que isso seria útil?
...

Você pode criar sistemas ou scripts baseado na posição do mouse :P, tipo supondo, eu vou fazer um menu, eu posso pegar a posição do mouse e caso o mouse esteja sobre um certo ícone do menu, e eu clicar ativar aquele ícone sacas :D

Haaa, agora entendi!
Veio mil idéias aqui. heuheue
...

O mouse é mostrado na tela? Ou tem como fazer por eventos?

Muito bacana o script, porém o cursor normal do windows não aparece em jogos Full Screen.
Será possível criar um cursor no jogo com a posição do mouse?

Anyway, ótimo script. +ouro


08/01/2013 às 15:43 #6 Última edição: 08/01/2013 às 15:49 por Raizen
Citação de: Ronin879 online 08/01/2013 às 15:43
Muito bacana o script, porém o cursor normal do windows não aparece em jogos Full Screen.
Será possível criar um cursor no jogo com a posição do mouse?

Anyway, ótimo script. +ouro



Ele só coloca posição de mouse e os cliques do mouse, o resto tem que fazer na raça x], mas sim para a pergunta dos 2 é possível sim, precisam que eu faça isso? Eu tenho o script pronto aqui já que fiz para o meu jogo.

Script ótimo! Possibilita a interação do Mostrar Imagem com o Mouse do computador, da pra ter várias ideias com isto kkkkkkk. Valeu )0)

Bem gostaria pelo menos de um exemplo de como fazer o uso do script.
Estou quebrando a cabeça aqui...  :=|:
Bem pois se eu consegui usa-ló será de grande ajuda para meu sistema.  :malvado:
Um abraço.

~ Faalco

"Script útil apenas para desenvolvedores"

O Script serve para outros programadores. É um modulo adicional ao RGSS que captura a posição e clique do mouse, logo, se você for um bom Coder, este script facilitará a criação de interação com o mouse no jogo. Como por exemplo menus, e telas de título, aonde se o mouse estiver sobre a opção desejada e clicar nela, então a opção será selecionada.

Resumindo, o código é útil realmente apenas para programadores em Ruby, abrindo uma gama de programação enorme. Não que seja impossível de o utilizar com pequenos trechos de código através do comando "Chamar script", mas ainda assim exige conhecimento bom na área.

Gostei á beça do código, vou testar algumas ideias aqui e ver se funcionam.



10/01/2013 às 21:53 #10 Última edição: 10/01/2013 às 21:55 por ElementoZero
É, vendo as explicações acima eu tive uma idéia brilhante bem agora...
PENA QUE EU NÃO SEI FAZER SCRIPTS KKKKK ---> Carregando --->  :T.T:
(Mas quem quizer aí que for Scripter, a gente pode fazer junto o script, tipo eu faço gráfico...)

Raizen, parabéns pelos seus trabalhos  :clap: , nunca vi Scripter igual a você  :XD:

Abraços,
ElementoZero  :cool:

===EDIT===

P.S.: É da minha mente ou só tem gente sinsitra nesse fórum?  :wow: Não sou digno de entrar num fórum tão genial como esse  :lol:
They're taking the hobbits to Isengard!

Não é meu script, é do Gab :X, e da para usar com eventos, mas é um pouco mais chato por que tem que usar bastante chamar scripts, porém nada que não dê para fazer :)

Tenho uma rápida dúvida... Como saber as coordenadas do mouse? E coloca-las nas condições?
Favor não me ignorar como fez antes.

18/01/2013 às 18:52 #13 Última edição: 18/01/2013 às 19:06 por Dax
@Worldbites:
Mouse.pos[0] => Coordenada X
Mouse.pos[1] => Coordenada Y

para fazer uma condição, crie este método para você ! Basta usar Mouse.area(sprite)

class << Mouse
  def area(object2)
    Mouse.pos[0] >= object2.x && Mouse.pos[0] <= object2.bitmpa.width && Mouse.pos[1] >= object2.y && Mouse.pos[1] <= object2.bitmap.height
  end
end



Citação de: Dax online 18/01/2013 às 18:52
para fazer uma condição, crie este método para você ! Basta usar Mouse.area(sprite)
class << Mouse
  def area(sprite)
    Mouse.pos[0] >= object2.x && Mouse.pos[0] <= object2.bitmpa.width && Mouse.pos[1] >= object2.y && Mouse.pos[1] <= object2.bitmap.height
  end
end

Onde coloco esse módulo?