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

Ryugo Mouse Title

Iniciado por Ryugo, 28/01/2014 às 23:11

Ryugo Mouse Title

[box class=titlebg]
Introdução
[/box]
Esse é um script que eu fiz mais para me treinar,e pode ser útil para estudos também.
É algo que eu nunca tinha visto,então resolvi me testar.

[box class=titlebg]
Características
[/box]
  É um script de Title utilizando o mouse.
Quando se clica na logo do Title,abri um site pré-determinado no script.
O botão muda se o mouse estiver em cima.
Aparece uma imagem pré-determinada quando clica com o mouse em qualquer lugar do title.

[box class=titlebg]
Script
[/box]

Cole acima do main, coloque todas as imagens necessárias na pasta Graphics/Title1 e coloque uma imagem qualquer na pasta pictures com o nome "Cursor"

=begin
╔══════════════════════════════════════════════════════════════════════════════╗
║                _______                                                       ║
║               |____   \                                                      ║
║               |      _/                                                      ║
║               |  |\  \                                                       ║
║ Feito por:    |__| \__\ yugo                                                 ║
║                                                                              ║
╟──────────────────────────────────────────────────────────────────────────────╢
║                          Mouse Title - 28/01/2014                            ║
╚══════════════════════════════════════════════════════════════════════════════╝
=end
#==============================================================================
# Configurações:
#
# Atenção: É necessário ter uma imagem(não importa o conteúdo) com o nome "Cursor"
# na pasta Graphics/Pictures .
#==============================================================================
module Ryugo_Title
 
#URL do site que será redirecionado quando clicar na logo do title
# Ex: "http://www.SITE.com"
Endereço_Site = "http://www.google.com"
 
#                   Imagens (todas na pasta Graphics/Titles1 )
 
# A lista dos nomes das imagens de fundo. Elas devem estar na pasta Title1.
Background = ["CrossedSwords", "Moldura"]
 
# Os nomes das imagens dos botões 'Novo Jogo', 'Continuar' e 'Sair', a primeira
# é do botão normal e a segunda é dele quando selecionado. As imagens devem
# estar na pasta Graphics/Titles1
NGame_Images = ["Title_NewGame", "Title_NewGame_Selected"]
 
Continue_Images = ["Title_Continue", "Title_Continue_Selected"]
 
Exit_Images = ["Title_Exit", "Title_Exit_Selected"]
 
# Nome da imagem com o nome do jogo,a primeira é a logo normal e a segunda é com
# a logo selecionada.A imagem deve estar na pasta Graphics/Titles1
Name_Image = ["Title_Name", "Title_Name_Selected"]
 
# A imagem que aparecerá quando clicar com o mouse.
# Se desejar que não apareça nada vá na linha 126 deste script e troque TRUE por
# FALSE
Click_Mouse = "Click_Mouse"
 
#                          Posições das imagens( [ x, y ] )
 
# As posições dos botões de 'Novo Jogo', 'Continuar' e 'Sair', o primeiro
# número é a posição X (horizontal) e o segundo é a posição Y (vertical).
#Lembre-se que esta é a posição do canto superior esquerdo da imagem.
NGame_Positions = [170, 250]
 
Continue_Positions = [170, 290]
 
Exit_Positions = [170, 330]
 
# As posições da imagem com o nome do jogo.
Name_Positions = [170, 30]
 
end
#==============================================================================
# Fim das Configurações.
# Não modifique nada escrito a baixo,á menos que saiba o que está fazendo.
#==============================================================================
#==============================================================================
# Scene_Title:
#==============================================================================
class Scene_Title < Scene_Base
 
#==============================================================================
# * start:
#
# Esse é o método inicial do script, onde são criadas as variáveis e chamados
# os métodos de criação
#
#==============================================================================
def start
  super
  # Iniciação do mouse
  @m = Mouse.new
  @m.show
  @m.hide_cur
 
  # Criação da array que guardará as imagens de fundo
  @background = []
 
  # Criação do Sprite dos botões, na ordem, de 'Novo Jogo', 'Continuar' e
  # 'Sair'
  @ngame_button = Sprite.new
 
  @continue_button = Sprite.new
 
  @exit_button = Sprite.new
 
  # Criação do Sprite da imagem com o nome do jogo
  @title = Sprite.new
 
  # Criado o sprite da imagem do click do mouse
  @click = Sprite.new
 
  # Criação da variável que guarda a posição do cursor, definindo qual botão
  # está selecionado no momento
  @index = 0
 
  # Chamando o método de criação das imagens, onde as posições e gráficos serão
  # aplicados nos Sprites criados
  create_images
 
  # Chamando o método que tocará a música definida para a tela de título
  play_title_music
 
end
 
#==============================================================================
# * update:
#
# Esse é o método de atualização do script, ele roda indefinidamente enquanto a
# cena estiver ativa, nele são executados os processos de verificação das
# teclas pressionadas.
#
#==============================================================================
 
def update
  super
 
# Atualiza o mouse
  @m.update
 
#Quando clicado o botão esquerdo do mouse aparecerá uma pequena imagem
  if @m.click_l?
    @click.visible = true
    @click.bitmap = Cache.title1(Ryugo_Title::Click_Mouse)
    @click.x = @m.x - 10
    @click.y = @m.y - 10
    Graphics.wait(5)
    @click.visible = false
  end
 
# Quando o mouse estiver sobre os botões Novo Jogo,Continuar e Sair mudará o
# sprite para o com o botão selecionado
  if @m.over_sprite?(@ngame_button)
    @index = 0
  elsif @m.over_sprite?(@continue_button)
    @index = 1
  elsif @m.over_sprite?(@exit_button)
    @index = 2
  end
 
# Opções de cliques nos botões Novo Jogo,Continuar e Sair
  if @m.click_sprite_l?(@ngame_button)    
      command_new_game
  elsif @m.click_sprite_l?(@continue_button)
      if DataManager.save_file_exists?
      command_continue
      else
      Sound.play_buzzer
      end
  elsif @m.click_sprite_l?(@exit_button)
      command_shutdown
  end
 
# Caso @index seja 0,1 ou 2,trocará o botão selecionado no title.
  case @index
 
  when 0  
    @ngame_button.bitmap = Cache.title1(Ryugo_Title::NGame_Images[1])
    @continue_button.bitmap = Cache.title1(Ryugo_Title::Continue_Images[0])
    @exit_button.bitmap = Cache.title1(Ryugo_Title::Exit_Images[0])
   
  when 1  
    @continue_button.bitmap = Cache.title1(Ryugo_Title::Continue_Images[1])
    @ngame_button.bitmap = Cache.title1(Ryugo_Title::NGame_Images[0])
    @exit_button.bitmap = Cache.title1(Ryugo_Title::Exit_Images[0])
   
  when 2
    @exit_button.bitmap = Cache.title1(Ryugo_Title::Exit_Images[1])
    @continue_button.bitmap = Cache.title1(Ryugo_Title::Continue_Images[0])
    @ngame_button.bitmap = Cache.title1(Ryugo_Title::NGame_Images[0])
   
  end
 
# Quando o mouse estiver sobre a logo do title,ela mudará para a logo selecionada.  
  if @m.over_sprite?(@title)
    @title.bitmap = Cache.title1(Ryugo_Title::Name_Image[1])
  else
    @title.bitmap = Cache.title1(Ryugo_Title::Name_Image[0])
  end
 
# Se clicar na logo do title abrirá o site configurado.
  if @m.click_sprite_l?(@title)  
    site
    Graphics.wait(10)
  end
   
end
 
#=============================================================================
# Método Site no Title
#=============================================================================
 
def site
  c = Win32API.new("Shell32", "ShellExecute", "pppppl", "l")
  # Mudar URL
  c.call(nil, "open", (Ryugo_Title::Endereço_Site), nil, nil, 0)
end
 
#==============================================================================
# * create_images:
#
# Esse é o método de criação das imagens dos botões 'Novo Jogo', 'Continuar' e
# 'Sair' e da imagem com o título do jogo.
#
#==============================================================================
 
def create_images
 
for i in 0...Ryugo_Title::Background.size
 
  @background.push(Sprite.new)
  @background[-1].bitmap = Cache.title1(Ryugo_Title::Background[i])
 
end
 
@ngame_button.x = Ryugo_Title::NGame_Positions[0]
@ngame_button.y = Ryugo_Title::NGame_Positions[1]
@ngame_button.bitmap = Cache.title1(Ryugo_Title::NGame_Images[0])
 
@continue_button.x = Ryugo_Title::Continue_Positions[0]
@continue_button.y = Ryugo_Title::Continue_Positions[1]
@continue_button.bitmap = Cache.title1(Ryugo_Title::Continue_Images[0])
 
@exit_button.x = Ryugo_Title::Exit_Positions[0]
@exit_button.y = Ryugo_Title::Exit_Positions[1]
@exit_button.bitmap = Cache.title1(Ryugo_Title::Exit_Images[0])
 
@title.x = Ryugo_Title::Name_Positions[0]
@title.y = Ryugo_Title::Name_Positions[1]
@title.bitmap = Cache.title1(Ryugo_Title::Name_Image[1])
end
 
#==============================================================================
# * command_new_game:
#
# Esse é o método que executa as funções da criação de um novo jogo.
#
#==============================================================================
 
def command_new_game
    DataManager.setup_new_game
    fadeout_all
    $game_map.autoplay
    SceneManager.goto(Scene_Map)
  end
 
#==============================================================================
# * command_continue:
#
# Esse é o método que executa o carregamento de um arquivo de jogo.
#
#==============================================================================
 
  def command_continue
    SceneManager.call(Scene_Load)
  end
 
#==============================================================================
# * command_shutdown:
#
# Esse é o método que fecha a janela do jogo.
#
#==============================================================================
 
  def command_shutdown
    fadeout_all
    SceneManager.exit
  end
 
#==============================================================================
# * terminate:
#
# Esse é o método de finalização do script, aqui as imagens serão apagadas.
#
#==============================================================================
 
def terminate
  super
 
  # Apagando os botões de 'Novo Jogo', 'Continuar' e 'Sair'
  @ngame_button.dispose
  @continue_button.dispose
  @exit_button.dispose
 
  # Apagando a imagem com o nome do jogo e a imagem do click do mouse
  @title.dispose
  @click.dispose
 
  #Apagando o cursor do mouse
  @m.dispose
 
  # Apagando cada imagem dentro da array @background
  @background.each {|image| image.dispose}
 
end
 
end
#==============================================================================
# Fim do Script de Title
#==============================================================================
 
=begin
╔══════════════════════════════════════════════════════════════════════════════╗
║                            ____  _____________                               ║
║                            \   \/  /\______   \                              ║
║                             \     /  |     ___/                              ║
║                             /     \  |    |                                  ║
║ Feito por:                 /___/\  \ |____|                                  ║
║                                  \_/                                         ║
╟──────────────────────────────────────────────────────────────────────────────╢
║               Sistema Integrado de Mouse - v1.1_VXA 12/12/13                 ║
╚══════════════════════════════════════════════════════════════════════════════╝
=end
 
$cursor = "Cursor"
 
class Mouse
 
  def initialize
    $show_cursor = Win32API.new('user32', 'ShowCursor', 'l', 'l')
    @viewport = Viewport.new(0, 0, 640, 480)
    @viewport.z = 20000
    @cursor = Sprite_Cursor.new(@viewport)
    hide
    update
  end
 
  def dispose
    @cursor.dispose
    @viewport.dispose
  end
 
  def update
    @cursor.update
  end
 
  def show  
    $show_cursor.call(1)
  end
 
  def hide  
    $show_cursor.call(0)
  end  
 
  def show_cur
    @cursor.visible = true
  end
 
  def hide_cur
    @cursor.visible = false
  end
 
  def x
    return M.mouse_pos[0]
  end
 
  def y
    return M.mouse_pos[1]
  end
 
  def click_l?
    if Input.pressed?($RMouse_BUTTON_L)
      return true
    end
    return false
  end
 
  def click_r?
    if Input.pressed?($RMouse_BUTTON_R)
      return true
    end
    return false
  end
 
  def over?(qx, qy, qwidth, qheight)
    if x.between?(qx, qwidth) and y.between?(qy, qheight)
      return true
    end
    return false
  end
 
  def click_sprite_l?(sprite)
    if over_sprite?(sprite) and Input.pressed?($RMouse_BUTTON_L)
      return true
    end
    return false
  end
 
  def click_sprite_r?(sprite)
    if over_sprite?(sprite) and Input.pressed?($RMouse_BUTTON_R)
      return true
    end
    return false
  end
 
  def over_sprite?(sprite)
    sx = sprite.x
    sy = sprite.y
    sx2 = sx + sprite.bitmap.width
    sy2 = sy + sprite.bitmap.height
    if x.between?(sx, sx2) and y.between?(sy, sy2)
      return true
    end
    return false
  end
 
end
 
class Sprite_Cursor < Sprite
 
  attr_accessor   :x
  attr_accessor   :y
  attr_accessor   :icon
  attr_accessor   :lock
 
  def initialize(viewport)
    super(viewport)
    update
    @icon = @old_icon = $cursor
  end
 
  def dispose
    unless self.bitmap
      self.bitmap.dispose
    end
    super
  end
 
  def set_icon(new)
    @icon = new
  end
 
  def update
    super
    unless self.bitmap
      self.bitmap = Cache.picture($cursor)
    end    
    if @icon != @old_icon
      unless @icon
        self.bitmap = Cache.picture($cursor)
        @old_icon = nil
      else
        self.bitmap = Cache.picture(@icon)
        @old_icon = @icon
      end
    end
    pos = M.mouse_pos
    unless pos
      unless self.x
        self.x = 0
      end
      unless self.y
        self.y = 0
      end
    else
      self.x = 0
      self.ox = pos[0] * -1 if pos[0] != nil
      self.y = 0
      self.oy = pos[1] * -1 if pos[1] != nil
    end
  end
 
end
 
module M
  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')
  module_function
 
  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(catch_anywhere = false)
    x, y = screen_to_client(*mouse_global_pos)
    width, height = client_size
    return x, y
  end  
 
  def del
    unless @oldcursor
      return
    else
      @SetClassLong.call(handel ,-12, @oldcursor)
      @oldcursor = nil
    end
  end  
 
  def screen_to_client(x, y)
    return nil unless x and y
    pos = [x, y].pack('ll')
    if $scr2cli.call(hwnd, pos) != 0
      return pos.unpack('ll')
    else
      return nil
    end
  end
 
  def 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 client_size
    rect = [0, 0, 0, 0].pack('l4')
    $client_rect.call(hwnd, rect)
    right, bottom = rect.unpack('l4')[2..3]
    return right, bottom
  end
 
end
 
#===============================================================#
# Keyboard Script                                               #
#---------------------------------------------------------------#
# By: Cybersam                                                  #
#   Date: 25/05/05                                              #
#   Version 4                                                   #
# EDITED BY TSUNOKIETTE (to get neccesary parts only)           #
#===============================================================#
 
module Kboard
  $RMouse_BUTTON_L = 0x01
  $RMouse_BUTTON_R = 0x02
 
  GetKeyState = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
  GetKeyboardState = Win32API.new("user32","GetKeyState",['i'],'i')
  GetSetKeyState = Win32API.new("user32","SetKeyboardState",['i'],'i')
 
  module_function
 
  def keyb(rkey)
    if GetKeyState.call(rkey) != 0
      return 1
    end
    return 0
  end
 
  def keyboard(rkey)
    GetKeyState.call(rkey) & 0x01 == 1  
  end
 
  def key(rkey, key = 0)
    GetKeyboardState.call(rkey) & 0x01 == key
  end
end
 
module Input
  module_function
  def pressed?(key)
    return true unless Win32API.new("user32","GetKeyState",['i'],'i').call(key).between?(0, 1)
    return false
  end  
end


[box class=titlebg]
Screenshots
[/box]

Spoiler




[close]

[box class=titlebg]
Download demo
[/box]

Clique Aqui!

[box class=titlebg]
Créditos e Agradecimentos
[/box]

- A mim, por criar e disponibilizar

- Masked pela aula ensinando a fazer uma Scene_Title e ajudar em algumas dúvidas

- XP pelo script de mouse

- Takkun pelo método de site

- Raizen pelas suas aulas e pela estrutura do tópico

Qualquer coisa só postar aqui ou me mandar uma PM  :ok:
Sim,sou péssimo em design.

Ah parabéns pelo trabalho, mesmo.
Eu fiz uma title com base no mouse também e por isso achei interessante o trabalho x).

Isso abaixo foi bem inteligente, eu fui direto ver se tinha feito algo assim u_u.
  def over_sprite?(sprite)
    sx = sprite.x
    sy = sprite.y
    sx2 = sx + sprite.bitmap.width
    sy2 = sy + sprite.bitmap.height
    if x.between?(sx, sx2) and y.between?(sy, sy2)
      return true
    end
    return false
  end


ficou maneiro, continue assim man, espero ver novos scripts seu, esse por exemplo está bem acima da média, digamos para ser apenas usado para estudo x).

Que bom que gostou  :D
E você já chegou a postar esse script que você fez? Eu gostaria de ver.

E esse método é do script de mouse do XP(membro),achei muito útil também,até por isso preferi este script de mouse  :XD:

Vou continuar estudando mais e quando surgir ideias tentar colocar em prática  :XD: