Introdução
Um widget que cria um botão a partir de uma imagem. Diferente de um que fiz (Soreto) que desenhava o fundo no botão, esse aqui (feito pelo Nanzin) desenha uma imagem clicável e com interação, alterna-se entre duas imagens diferentes (quando o mouse estiver sobre e quando o mouse está fora do widget).
Qualquer bug por favor reportar no tópico.
Script
Screens
Não tenho aqui, mas nem precisa pois varia de acordo com a imagem que escolher.
Créditos
Nanzin
Um widget que cria um botão a partir de uma imagem. Diferente de um que fiz (Soreto) que desenhava o fundo no botão, esse aqui (feito pelo Nanzin) desenha uma imagem clicável e com interação, alterna-se entre duas imagens diferentes (quando o mouse estiver sobre e quando o mouse está fora do widget).
Qualquer bug por favor reportar no tópico.
Script
- Código:
#----------------------------------------------------------------#
# ** Image Button [Widget]
#----------------------------------------------------------------#
# Developed: Nanzin
# Date: 17-02-2013 00:50
#----------------------------------------------------------------#
#---------------------------- PT BR -----------------------------#
# Como Usar:
# - Chame a classe em seu código
# Image_Button.new(window,x,y,imageonmouseout,imageonmouseover,type)
#
# ONDE:
# Window: Janela que o botão irá aparecer
# x: Coordenada X
# y: Coordenada Y
# imageonmouseout: Imagem padrão
# imageonmouseover: Imagem que mudará quando o mouse estiver sobre.
# type: Icone ou Imagem
#
# Exemplo:
# @button = Image_Button.new(self,100,40,"Gold","Gold2","image").
#
# Este exemplo irá criar a imagem de Gold encontrada na pasta
# pictures do projeto, e vai mudar para Gold2 quando o mouse
# estiver sobre
#
# @button = Image_Button.new(self,100,40,"Gold","Gold2","icon").
#
# Este exemplo irá criar a imagem de Gold encontrada na pasta
# icons do projeto, e vai mudar para Gold2 quando o mouse
# estiver sobre
#
#----------------------------- EN [English]-------------------------------
# (I apologize if errors occur in English,
# my English is a little rusty.
# How to Use:
# - call the class in your code.
# Image_Button.new(window,x,y,imageonmouseout,imageonmouseover,type)
#
# WHERE:
# Window: the window that the button will display.
# x: x coordinate
# y: y coordinate
# imageonmouseout: default image
# imageonmouseover: image to change.
# type: Icon or Picture
#
# Example:
# @button = Image_Button.new(self,100,40,"Gold","Gold2","image").
#
# This example will do a bitmap gold of the folder picture
# in the project, and will change to Gold2 when the mouse is over.
#----------------------------------------------------------------#
#----------------------------------------------------------------#
class Image_Button < Widget
attr_accessor :mask
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(win,x,y,imageonmouseout,imageonmouseover,type,&block)
super(win,x, y)
@imageout = check_type(type,imageonmouseout)
@imageover = check_type(type,imageonmouseover)
@block = block
refresh
end
#--------------------------------------------------------------------------
# Draw the button text, and create the mask.
#--------------------------------------------------------------------------
def refresh
@s.bitmap = Bitmap.new(@imageout.width,@imageout.height)
@s.bitmap.blt(0,0,@imageout,Rect.new(0,0,@s.bitmap.width,@s.bitmap.height))
@mask = Sprite.new(win.viewport)
@mask.x=@s.x
@mask.y=@s.y
@mask.visible= false
@mask.z = 5000
@mask.bitmap = @imageover
end
#--------------------------------------------------------------------------
# Dispose the mask, and itself
#--------------------------------------------------------------------------
def dispose
@mask.dispose
super
end
#--------------------------------------------------------------------------
# Frame update, check the mask status, and active status
#--------------------------------------------------------------------------
def update
@mask.visible= false if @mask.visible and !visible
if visible
@mask.x=@s.x if @mask.x != @s.x
@mask.y=@s.y if @mask.y != @s.y
@mask.update
if in_area?
@mask.visible=true
else
@mask.visible=false
end
self.active=false if self.active
@s.opacity = Window_Edits::Button_Active_Opacity if @s.opacity<Window_Edits::Button_Active_Opacity
end
super
end
#--------------------------------------------------------------------------
# Change the button opacity when clicked
#--------------------------------------------------------------------------
def clicked
#$game_system.se_play($data_system.decision_se)
@s.opacity -= Window_Edits::Button_Not_Active_Opacity if @s.opacity==Window_Edits::Button_Active_Opacity
if @block != nil
@block.call
else
self.active = true
end
end
#--------------------------------------------------------------------------
# Visible
#--------------------------------------------------------------------------
def visible=(v)
@mask.visible=v if @mask != nil
@s.visible = v if @s != nil
end
#-------------------------------------------------------------------------
# Type
#--------------------------------------------------------------------------
def check_type(type,image)
case type
when "image"
return RPG::Cache.picture(image)
break
when "icon"
return RPG::Cache.icon(image)
break
end
end
end
Screens
Não tenho aqui, mas nem precisa pois varia de acordo com a imagem que escolher.
Créditos
Nanzin