Life Rpg Maker
Registre-se em nossa comunidade e saiba Mais do mundo maker(:



 
InícioInício  chat  PortalPortal  CalendárioCalendário  FAQFAQ  BuscarBuscar  MembrosMembros  GruposGrupos  Registrar-seRegistrar-se  Conectar-seConectar-se  

Compartilhe | 
 

 Movimento pelo Clique do Mouse

Ir em baixo 
AutorMensagem
Samuka_Adm
Admin
Admin
avatar

Medalhas :
Mensagens : 150
Pontos : 319
Reputação : 44
Data de inscrição : 15/06/2012

MensagemAssunto: Movimento pelo Clique do Mouse   Sab Jun 16, 2012 11:16 pm

Movimento pelo Clique do Mouse<


Boa Noite LRM
Este é um script do Mendesx que já tem um tempinho que foi criado. Já foi postado em outras comunidades, mas agora eu queria botar aqui, porque acho que ele pode vir a ser útil em alguns jogos. Enfim, é um script que permite que o personagem se mova pelo mapa clicando com o mouse, como em MMORPGs, por exemplo.

créditos a:
Cybersam, pelo módulo que permite o clique do mouse, a Near Fantastica, pelo módulo que permite ter a posição do mouse e também pelo script de path finding, e ao Mendesx, por "juntar" os três scripts e adicionar alguns códigos, para permitir o movimento.

O efeito não é perceptível por imagens.

O script:

Código:
#================================================================
# Movimento pelo Mouse
# Autor: Mendesx
#================================================================
#  Este script permite movimentar o herói pelo clique do mouse.
# Créditos:
# - Cybersam e Near Fantastica
#================================================================
#======================================
# ■ Mouse Input - Near Fantastica
#======================================
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
  x = @pos[0] / 32
  y = @pos[1] / 32
  x = x * 32
  y = y * 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)
  begin
    return x, y
  rescue
    return -1, -1
  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


#==============================================================================
# Keyboard Input Module - Cybersam
#==============================================================================
module Input
  @keys = []
  @pressed = []
  Mouse_Left = 1
  Mouse_Right = 2
  Mouse_Middle = 4
  USED_KEYS = [Mouse_Left, Mouse_Right, Mouse_Middle]
  module_function
  def triggered?(key)
    Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1
  end
  def check(key)
    Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1
  end
  def pressed?(key)
    return true unless Win32API.new("user32","GetKeyState",['i'],'i').call(key).between?(0, 1)
    return false
  end
  def mouse_update
    @used_i = []
    for i in USED_KEYS
      x = check(i)
      if x == true
        @used_i.push(i)
      end
    end
  end
end

#==============================================================================
#  Path Finding
#==============================================================================
# Near Fantastica
#===========================================================
  class Game_Character
    #--------------------------------------------------------------------------
    alias nf_pf_game_character_initialize initialize
    alias nf_pf_game_character_update update
    #--------------------------------------------------------------------------
    attr_accessor :map
    attr_accessor :runpath
    #--------------------------------------------------------------------------
    def initialize
      nf_pf_game_character_initialize
      @map = nil
      @runpath = false
    end
    #--------------------------------------------------------------------------
    def update
      run_path if @runpath == true
      nf_pf_game_character_update
    end
    #--------------------------------------------------------------------------
    def run_path
      return if moving?
      step = @map[@x,@y]
      if step == 1
        @map = nil
        @runpath = false
        return
      end
      dir = rand(2)
      case dir
      when 0
        move_right if @map[@x+1,@y] == step - 1 and step != 0
        move_down if @map[@x,@y+1] == step - 1 and step != 0
        move_left if @map[@x-1,@y] == step -1 and step != 0
        move_up if @map[@x,@y-1] == step - 1 and step != 0
      when 1
        move_up if @map[@x,@y-1] == step - 1 and step != 0
        move_left if @map[@x-1,@y] == step -1 and step != 0
        move_down if @map[@x,@y+1] == step - 1 and step != 0
        move_right if @map[@x+1,@y] == step - 1 and step != 0
      end
    end
    #--------------------------------------------------------------------------
    def find_path(x,y)
      sx, sy = @x, @y
      result = setup_map(sx,sy,x,y)
      @runpath = result[0]
      @map = result[1]
      @map[sx,sy] = result[2] if result[2] != nil
    end
    #--------------------------------------------------------------------------
    def clear_path
      @map = nil
      @runpath = false
    end
    #--------------------------------------------------------------------------
    def setup_map(sx,sy,ex,ey)
      map = Table.new($game_map.width, $game_map.height)
      map[ex,ey] = 1
      old_positions = []
      new_positions = []
      old_positions.push([ex, ey])
      depth = 2
      depth.upto(100){|step|
        loop do
          break if old_positions[0] == nil
          x,y = old_positions.shift
          return [true, map, step] if x == sx and y+1 == sy
          if $game_player.passable?(x, y, 2) and map[x,y + 1] == 0
            map[x,y + 1] = step
            new_positions.push([x,y + 1])
          end
          return [true, map, step] if x-1 == sx and y == sy
          if $game_player.passable?(x, y, 4) and map[x - 1,y] == 0
            map[x - 1,y] = step
            new_positions.push([x - 1,y])
          end
          return [true, map, step] if x+1 == sx and y == sy
          if $game_player.passable?(x, y, 6) and map[x + 1,y] == 0
            map[x + 1,y] = step
            new_positions.push([x + 1,y])
          end
          return [true, map, step] if x == sx and y-1 == sy
          if $game_player.passable?(x, y, 8) and map[x,y - 1] == 0
            map[x,y - 1] = step
            new_positions.push([x,y - 1])
          end
        end
        old_positions = new_positions
        new_positions = []
      }
      return [false, nil, nil]
    end
  end
 
  class Game_Map
    #--------------------------------------------------------------------------
    alias pf_game_map_setup setup
    #--------------------------------------------------------------------------
    def setup(map_id)
      pf_game_map_setup(map_id)
      $game_player.clear_path
    end
  end
 
  class Game_Player
    def update_player_movement
      $game_player.clear_path if Input.dir4 != 0
      # Move player in the direction the directional button is being pressed
      case Input.dir4
      when 2
        move_down
      when 4
        move_left
      when 6
        move_right
      when 8
        move_up
      end
    end
  end
 
  class Interpreter
    #--------------------------------------------------------------------------
    def event
      return $game_map.events[@event_id]
    end
  end

class Game_Player < Game_Character
  alias move update
  def update
    move
    mx = (Mouse.pos[0] + $game_map.display_x / 4) / 32
    my = (Mouse.pos[1] + $game_map.display_y / 4) / 32
    unless moving? or $game_system.map_interpreter.running? or
      @move_route_forcing or $game_temp.message_window_showing
      if Input.triggered?(Input::Mouse_Left)
        find_path(mx, my)
      end
    end
  end
end
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://liferpgmaker.forumfacil.net
Zeref
Moderador
Moderador
avatar

Mensagens : 49
Pontos : 112
Reputação : 7
Data de inscrição : 18/06/2012
Idade : 31
Localização : Rua Bolo Doce

MensagemAssunto: Re: Movimento pelo Clique do Mouse   Dom Jul 22, 2012 12:29 pm

cade a demo?

_________________
VEJA MINHA ASSINATURA lol!


Spoiler:
 
[b]
Voltar ao Topo Ir em baixo
Ver perfil do usuário
Samuka_Adm
Admin
Admin
avatar

Medalhas :
Mensagens : 150
Pontos : 319
Reputação : 44
Data de inscrição : 15/06/2012

MensagemAssunto: Re: Movimento pelo Clique do Mouse   Qui Set 20, 2012 11:25 pm

desculpem reviver o topico,
zeref, que demo? .-. é só o script .-.

_________________
Do quê adianta baixar um sistema e só copiar tudo? estão faltando makers no mundo intão porquê você não aprende ruby para fazer seus proprios scripts?
Voltar ao Topo Ir em baixo
Ver perfil do usuário http://liferpgmaker.forumfacil.net
Conteúdo patrocinado




MensagemAssunto: Re: Movimento pelo Clique do Mouse   

Voltar ao Topo Ir em baixo
 
Movimento pelo Clique do Mouse
Voltar ao Topo 
Página 1 de 1
 Tópicos similares
-
» [Resolvido]Como fazer a personagem seguir o clique do mouse?
» Cursor diferente ao passar mouse pelo link
» Como clicar e arrastar com o mouse um objeto?
» GM3D 02 – Projeção e Movimento da Câmera
» Mickey Mouse - in search of life

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
Life Rpg Maker :: Rpg Maker XP :: Scripts RGSS-
Ir para: