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

HUD ~ Lag Excessivo

Iniciado por Takkun, 12/12/2012 às 09:10

12/12/2012 às 09:10 Última edição: 12/12/2012 às 17:46 por Faalco
Bem hoje eu fiz, um pequeno script com algumas aulas que vi e com alguma expêriencia que eu tenho em RGSS3 então acabei por desenvolver uma pequena HUD mais achei um problema logo depois de testa-lá pela primeira vez: Lag Excessivo no mapa, preciso que vocês scripters que estejam de plantão me deem uma força para amenizar ou diminuir esse Lag. O Script está abaixo:

#=======================================================
#         Faalco HUD ~ 4 Jogadres
# Autor : Faalco
# Comunidade : www.centrorpg.com
# Cria uma HUD de até 4 jogadores, baseado na HUD de dodoop.
#=======================================================
NFont = "FV Almelo" #Nome da Fonte da HUD.
SFont = 16 #Tamanho que a Fonte aparecerá na HUD.
YHUD = 0 #Posição Y na tela onde a HUD ficará.
OPHUD = 255 #Opacidade da Janela da HUD.
#Aqui termina as configurações da HUD.
#==============================================================================
class Faalco_HUD < Window_Base
  def initialize
    super(0, YHUD, 544, 130)
    self.opacity = OPHUD
    @actor = $game_party.members[0]
    refresh
  end
  def refresh
    self.contents.font.name = NFont
    self.contents.font.size = SFont
    return if $game_party.members.size <= 0
    self.contents.clear
    @item_max = $game_party.members.size
    for actor in $game_party.members
    x = actor.index * 128
    y = 0
    draw_actor_face(actor, x, y)
    draw_actor_graphic(actor, x+15, y+96)
    draw_actor_name(actor, x, y)
    draw_actor_hp(actor, x, y+32)
    draw_actor_mp(actor, x, y+50)
    draw_actor_level(actor, x+30, y+75)
  end
  def update
    refresh
  end
end
end
class Scene_Map < Scene_Base
   alias hud_start start
  alias hud_update update
  alias hud_terminate terminate
  def start
    @Faalco_HUD = Faalco_HUD.new
    hud_start
  end
  def update
     @Faalco_HUD.refresh  if advenced_update
     hud_update
  end
  def terminate
    @Faalco_HUD.dispose
    hud_terminate
  end
  def advenced_update
    return false if Graphics.frame_count % 10 != 0#7 != 0
    return true
  end
end


Um abraço.
~ Faalco


Bem fera, geralmente o pessoal faz para as HUDs se atualizarem
quando a uma mudança em um dos valores em que ela trabalha.
Tipo... eu tenho uma pra ABS aqui, que exibe bastante coisa mesmo,
e foi feita deste modo. Acho que em frames assim, ainda que de
10 em 10, acho que tá assim, vai ter hora que ela não vai
precisar atualizar...

Só não tenho certeza se é isso que está interferindo...
  :ded:


Bem, eu acho que o problema deve ser que ele estava atualizando o script muitas vezes então acaba causando Lag, mais se alguém quiser me ajudar ainda ficarei muito contente.
Um abraço.

~ Faalco

Nops, o lag excessivo é por causa disso.
draw_actor_face(actor, x, y)

Pequeno bug na atualização de faces do Ace, basta usar o seguinte que sua hud vai parar de lagar :3

#=======================================================
#         Faces Bug Fix
# Autor : Raizen
# Comunidade : www.centrorpgmaker.com
# Corrige um bug ao usar o comando draw_face
#=======================================================

class Window_Base < Window
    def draw_face(face_name, face_index, x, y, enabled = true)
    bitmap = Cache.face(face_name)
    rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
    contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  end
end

Fiz o uso do seu script o Lag foi amenizado (um pouco) mais ainda está muito travado.
Teste ambos os scripts, e você verá o que estou lhe dizendo.
Um abraço.

~ Faalco

Bom, Faalco, pelo que vi, você não vez um Data, para guardar as informações do personagem, para atualizar somente se os dados forem diferentes.

Ele recria a HUD a cada instante, acho que também retirando o update da Scene_Map pode melhorar, ou então, faz do jeito padrão, sem o "Advence_update"
...

Ah eu vi aonde, use o meu script de face porque vai ser necessário e retire isso daqui.
  def update
    refresh
  end


veja que é desnecessário atualizar ele por ai, se você já o está atualizando pelo Scene_Map, se colocar junto com isso ele vai atualizar 2 vezes por frame sacas, oque pesa MUITO :)

Valeu Raizen resolvido o problema.
Agora está rodando normalmente.
Um abraço.

~ Faalco