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

Black HUD

Iniciado por Black_Zero, 12/02/2013 às 22:50


Black HUD

Informações
Criador: Black_Zero
Engine: RPG Maker VX

Introdução

Estou aprendendo RGSS, e como queria testar meus "conhecimentos", decidi criar algo um pouco mais difícil, no começo tentei criar uma HUD mais simples, no estilo Super Mario, mas depois desisti e decidi criar outra melhor, foi aí que saiu essa HUD, que tem uma utilidade, mostrar o HP, MP e nível do heroi.

Instalação

Copie o codigo abaixo e cole acima do Main.
#==============================================================================
#                                .::Black HUD::.
#------------------------------------------------------------------------------
# Criado por: Black_Zero      Data: 11/02/2013      Ultima Revisão: 12/03/2013
#==============================================================================
class Scene_Map < Scene_Base
#------------------------------------------------------------------------------
# Este script cria uma HUD com o rosto do heroi HP, MP e nível no topo da tela
# à esquerda.
#------------------------------------------------------------------------------
  alias hud_start start
  alias hud_update update
  alias hud_terminate terminate
#------------------------------------------------------------------------------
# Inicialização da HUD.
#------------------------------------------------------------------------------
  def start
    hud_start
    @hud = Sprite.new
    @hud.bitmap = Bitmap.new(1,1)
    black_hud
  end
#------------------------------------------------------------------------------
# Atualização da HUD se necessário, evita LAG intenso ou travamento do PC.
#------------------------------------------------------------------------------
  def update
    hud_update
    black_hud if hud_need_update?
  end
#------------------------------------------------------------------------------
# Finalização de tudo.
#------------------------------------------------------------------------------
  def terminate
    hud_terminate
    @hud.dispose
  end
#------------------------------------------------------------------------------
# Variáveis usados para saber se a HUD precisa de atualização.
#------------------------------------------------------------------------------
def hud_vars
    actor = $game_party.members[0]
    @hud1 = actor.face_name
    @hud2 = actor.face_index
    @hud3 = actor.hp
    @hud4 = actor.maxhp
    @hud5 = actor.mp
    @hud6 = actor.maxmp
    @hud7 = actor.level
  end
#------------------------------------------------------------------------------
# Atualiza se necessário.
#------------------------------------------------------------------------------
def hud_need_update?
    actor = $game_party.members[0]
    return true if @hud1 != actor.face_name
    return true if @hud2 != actor.face_index
    return true if @hud3 != actor.hp
    return true if @hud4 != actor.maxhp
    return true if @hud5 != actor.mp
    return true if @hud6 != actor.maxmp
    return true if @hud7 != actor.level
    return false
  end
#------------------------------------------------------------------------------
# Este é a parte do script onde estão os comandos para fazer a HUD aparecer na
# tela, não modifique nada se não souber o que está fazendo!
#------------------------------------------------------------------------------
  def black_hud
    actor = $game_party.members[0]
    @hud.bitmap.clear
    @hud.bitmap = Bitmap.new("Graphics/Pictures/HUD.png")
    rect = Rect.new(0, 0, 96, 96)
    rect.x = actor.face_index % 4 * 96
    rect.y = actor.face_index / 4 * 96
    @hud.bitmap.blt(0, 0, Cache.face(actor.face_name), rect)
    text = "Nível "
    actor_level = actor.level.to_s
    level = text + actor_level
    hpc1 = Color.new(100,0,0)
    hpc2 = Color.new(255,0,0)
    mpc1 = Color.new(0,0,100)
    mpc2 = Color.new(0,0,255)
    hp_bar = 242 * actor.hp / actor.maxhp
    mp_bar = 178 * actor.mp / actor.maxmp
    @hud.bitmap.gradient_fill_rect(102,  3, hp_bar, 11, hpc1, hpc2)
    @hud.bitmap.gradient_fill_rect(102, 20, mp_bar, 12, mpc1, mpc2)
    @hud.bitmap.draw_text(100, 79, 160, 20, level)
  end
end
#------------------------------------------------------------------------------
#                           .::End of the Script::.
#------------------------------------------------------------------------------



Agora salve a imagem abaixo em "Graphics > Pictures", renomeado como "HUD.png"


E pronto! Não precisa configurar nada! Só instalar e começar a jogar.

OBS: Se você reparar, irá ver que o jogo começará a usar muita memória RAM, mas não é muito, principalmente porque, quando a quantidade de RAM que o jogo usa chega em 140MB, automaticamente o uso é reduzido para 40MB, e fica neste ciclo, então não se preocupe!

Imagem da HUD

E só uma imagem mostrando como fica a HUD no jogo.


Créditos
A mim, Black_Zero, por ter criado a HUD e disponibilizado aqui.

pow bem legal xD, o esquema de atualizar apenas quando muda algo na hud também é interessante, agora posso dar 2 dicas xD, se me permite?

hud_update não é um excelente nome para um alias, se outra pessoa usar esse mesmo nome, pode dar alguns erros, então sugiro algo que tenha a ver com o seu nick ou um numero aleatório tipo, hud_bl_update, esse é muito mais difícil alguém usar igual.

Segunda coisa, o black_hud, que é o método que atualiza as coisas, tem algumas informações estáticas nele, ou seja você acaba atualizando coisas que não precisavam atualizar novamente.
Por exemplo essas.
    text = "Nível "
    hpc1 = Color.new(100,0,0)
    hpc2 = Color.new(255,0,0)
    mpc1 = Color.new(0,0,100)
    mpc2 = Color.new(0,0,255)


Por mais que tenha que mudar a variável local para uma de instância que é aquele com o @ na frente, fica bem mais leve deixar todas essas info separadas e inicializadas apenas no initialize, sem ter que atualizar essa info novamente :).

Desculpa a demora para responder, eu estava viajando.

Eu já pensei em colocar as informações no initialize, mas não sei o por que, mas quando eu coloco, as informações não aparecem na tela, tipo, não aparece o nome "Nível " quando se está no initialize.

Eu mau comecei no mundo dos scripts e já estou desistindo XD, prefiro os eventos!