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

Rhyan RGSS3 Hud

Iniciado por Rhyan, 07/05/2020 às 23:30


Rhyan RGSS3 Hud

Hay! Basicamente, este script cria uma janela que mostra: HP, TP, MP do jogador.

Os termos estão no script.

Para acessar o script: https://pastebin.com/GPmSBJtw.

Imagens:


Changelog

...
^~^) -Rhyan.

Opa, legal ver que já está conseguindo fazer umas coisas mais interessantes \o

Só uma observação en passant sobre a implementação: você criou os métodos window_width e window_height na Scene_Map, isso não faz muito sentido. Primeiro, porque fica difícil saber que "window" é essa: se tiver mais uma janela na cena já fica ambíguo e corre o risco de acabar conflitando com outro script. Segundo, porque a largura e altura da janela da HUD não são responsabilidade da cena, e sim da própria janela.

Uma implementação mais interessante (e usada nas classes padrão de Window do RGSS3) é a que você vê na Window_Message, por exemplo.

Algo que também me incomodou levemente foi o método update apagar todo o conteúdo da janela e desenhar de novo. Por mais que seja pouca coisa, isso acontece 60 vezes por segundo, e na maior parte do tempo o conteúdo dessa janela continua o mesmo, então parece meio desperdício :S
Uma solução fácil seria "lembrar" os valores do hp, mp e tp na janela e só redesenhar se os valores desses atributos no jogador forem diferentes dos que você guardou.
~ Masked

Citação de: Brandt online 08/05/2020 às 09:32
Opa, legal ver que já está conseguindo fazer umas coisas mais interessantes \o

Só uma observação en passant sobre a implementação: você criou os métodos window_width e window_height na Scene_Map, isso não faz muito sentido. Primeiro, porque fica difícil saber que "window" é essa: se tiver mais uma janela na cena já fica ambíguo e corre o risco de acabar conflitando com outro script. Segundo, porque a largura e altura da janela da HUD não são responsabilidade da cena, e sim da própria janela.

Uma implementação mais interessante (e usada nas classes padrão de Window do RGSS3) é a que você vê na Window_Message, por exemplo.

Algo que também me incomodou levemente foi o método update apagar todo o conteúdo da janela e desenhar de novo. Por mais que seja pouca coisa, isso acontece 60 vezes por segundo, e na maior parte do tempo o conteúdo dessa janela continua o mesmo, então parece meio desperdício :S
Uma solução fácil seria "lembrar" os valores do hp, mp e tp na janela e só redesenhar se os valores desses atributos no jogador forem diferentes dos que você guardou.

Opa, Brandt! Obrigado por responder! Estarei atualizando o script e postando a nova versão aqui. Acho que já tenho um modo na cabeça de fazer os valores de HP, MP, TP serem desenhados dessa forma.

Obrigado de novo!
^~^) -Rhyan.

Boa Rhyan! Ficou bem legal e o código está bem limpo parabéns  :XD:

Adicionando algo para arrumar futuramente também:
Para alterar o ícone (HP || MP), chame uma Script Call (evento, com o seguinte código:
"Main_RHud_Config::Icone_HP = index_do_seu_icone" para alterar o ícone de HP. Ou, para alterar o ícone de MP:
"Main_RHud_Config::Icone_MP = index_do_seu_icone" para alterar o ícone de MP. Ou, para alterar o ícone de TP ('-'):
"Main_RHud_Config::Icone_TP = index_do_seu_icone" para alterar o ícone de TP.


Não é legal mudar constantes em tempo de execução porque bem... são ... constantes XD. Ele apesar de funcionar, ele gera warnings (warning não é erro!), mas sendo warnings que podemos evitar tem outros modos melhores de realizar isso que você quer.
Tipo ou mantém constante e não avisa pra pessoa que dá para mudar, ou então tem vários modos de concertar isso. Sem falar que acho que assim se o jogador alterar salvar o jogo e voltar, vai estar os icones antigos.

Um seria usar atributos de alguma classe que é realizado o save e o load, sendo do jogador, recomendaria criar no Game_Player, por exemplo.

Legal o script, mas porque desenhar o TP na HUD? Por padrão ele sempre volta para zero ao fim da batalha.


08/05/2020 às 16:27 #5 Última edição: 08/05/2020 às 16:31 por Syureri
Citação de: Gabriel online 08/05/2020 às 15:15
Legal o script, mas porque desenhar o TP na HUD? Por padrão ele sempre volta para zero ao fim da batalha.
Incentivo pra um futuro sistema de batalha que ocorra no mapa. (。・∀・)ノ

Curti o trabalho, pequeno e organizado. Bacana ter colocado espaços pra deixar o código mais legível também.
Recomendo reduzir as redundâncias nos comentários quando o código já é auto explicativo. Ex:
def window_width
    return 200 #<- Largura da janela.
end

window_width já dá a entender que aquilo é a largura da janela.

include Main_RHud_Config #<- Incluindo módulo de Configuração Principal.

include já explica que você está incluindo um módulo (sim, classes são módulos também), "Main" já indica que é um principal e o "Config" no final do nome já dá a entender que é um módulo de configuração.

self.opacity = Opacidade #<- Opacidade
----------------
contents.clear #<- Limpando conteúdo da janela.
----------------
draw_actor_hp($game_party.members[0], 26, 6) #<- Desenhando o HP;
draw_actor_mp($game_party.members[0], 26, 34) #<- Desenhando o MP;
draw_actor_tp($game_party.members[0], 26, 62) #<- Desenhando o TP;

Mesmo?



Um código bem escrito não precisa de comentários redundantes, porque qualquer um que saiba programação num geral irá entender sem essas explicações. Sugiro que faça uso deles apenas em partes do código que realmente precisam de uma explicação, ex:
seed = 0
# this is a comment explaining why it is important to left/right shift some bits before using xor.
# TODO: use for loop so that we conform to the DRY principle (Don't Repeat Yourself)
seed ^= compute_hash(value1) + 0x9e3779b9 + (seed << 6) + (seed >> 2)
seed ^= compute_hash(value2) + 0x9e3779b9 + (seed << 6) + (seed >> 2)
return seed


Que a força esteja contigo, meu jovem o/ Desafio: Fazer a barra de HP e MP descer suavemente.

08/05/2020 às 17:08 #6 Última edição: 08/05/2020 às 17:09 por Rhyan
Citação de: Gabriel online 08/05/2020 às 15:15
Legal o script, mas porque desenhar o TP na HUD? Por padrão ele sempre volta para zero ao fim da batalha.

Opa, Gabriel! Bem... Eu coloquei o máximo de valores nela para que a mesma fique mais completa. Vou tirar ela, se ela volta zero acho que não é muito útil então.

Citação de: Syureri online 08/05/2020 às 16:27
Incentivo pra um futuro sistema de batalha que ocorra no mapa. (。・∀・)ノ

Curti o trabalho, pequeno e organizado. Bacana ter colocado espaços pra deixar o código mais legível também.
Recomendo reduzir as redundâncias nos comentários quando o código já é auto explicativo. Ex:
def window_width
    return 200 #<- Largura da janela.
end

window_width já dá a entender que aquilo é a largura da janela.

include Main_RHud_Config #<- Incluindo módulo de Configuração Principal.

include já explica que você está incluindo um módulo (sim, classes são módulos também), "Main" já indica que é um principal e o "Config" no final do nome já dá a entender que é um módulo de configuração.

self.opacity = Opacidade #<- Opacidade
----------------
contents.clear #<- Limpando conteúdo da janela.
----------------
draw_actor_hp($game_party.members[0], 26, 6) #<- Desenhando o HP;
draw_actor_mp($game_party.members[0], 26, 34) #<- Desenhando o MP;
draw_actor_tp($game_party.members[0], 26, 62) #<- Desenhando o TP;

Mesmo?



Um código bem escrito não precisa de comentários redundantes, porque qualquer um que saiba programação num geral irá entender sem essas explicações. Sugiro que faça uso deles apenas em partes do código que realmente precisam de uma explicação, ex:
seed = 0
# this is a comment explaining why it is important to left/right shift some bits before using xor.
# TODO: use for loop so that we conform to the DRY principle (Don't Repeat Yourself)
seed ^= compute_hash(value1) + 0x9e3779b9 + (seed << 6) + (seed >> 2)
seed ^= compute_hash(value2) + 0x9e3779b9 + (seed << 6) + (seed >> 2)
return seed


Que a força esteja contigo, meu jovem o/ Desafio: Fazer a barra de HP e MP descer suavemente.

:sera:... Realmente exagerei nessa parte, irei atualizar amanha (hoje tirei o dia apenas para focar no meu projeto).

Que bom que você gostou! Que a força também esteja com você! Desafio aceito! :lol:

Citação de: Raizen online 08/05/2020 às 11:31
Boa Rhyan! Ficou bem legal e o código está bem limpo parabéns  :XD:

Adicionando algo para arrumar futuramente também:
Para alterar o ícone (HP || MP), chame uma Script Call (evento, com o seguinte código:
"Main_RHud_Config::Icone_HP = index_do_seu_icone" para alterar o ícone de HP. Ou, para alterar o ícone de MP:
"Main_RHud_Config::Icone_MP = index_do_seu_icone" para alterar o ícone de MP. Ou, para alterar o ícone de TP ('-'):
"Main_RHud_Config::Icone_TP = index_do_seu_icone" para alterar o ícone de TP.


Não é legal mudar constantes em tempo de execução porque bem... são ... constantes XD. Ele apesar de funcionar, ele gera warnings (warning não é erro!), mas sendo warnings que podemos evitar tem outros modos melhores de realizar isso que você quer.
Tipo ou mantém constante e não avisa pra pessoa que dá para mudar, ou então tem vários modos de concertar isso. Sem falar que acho que assim se o jogador alterar salvar o jogo e voltar, vai estar os icones antigos.

Um seria usar atributos de alguma classe que é realizado o save e o load, sendo do jogador, recomendaria criar no Game_Player, por exemplo.

Opa, Raizen! Obrigado, que bom que você gostou :>! :sera:...Vou ver o que faço, mas eu quero preservar a personalização, mas de modo seguro.

Muito obrigado a todos que comentaram!!!  :XD:
^~^) -Rhyan.

08/05/2020 às 18:02 #7 Última edição: 08/05/2020 às 18:06 por Jorge_Maker
Compilei todas as observações realizadas pelos membros acima acerca do script e o reescrevi (ainda me limitando à sua ideia original, no entanto):
https://pastebin.com/cPjF5Rb8
Ainda não é o ideal para o sistema, seria interessante adicionar várias outras características à este. Entretanto, considerando que mantive a simplicidade dele, acho que isso servirá como um bom material de estudo para te guiar nos seus próximos sistemas.
Oxe

Citação de: Jorge_Maker online 08/05/2020 às 18:02
Compilei todas as observações realizadas pelos membros acima acerca do script e o reescrevi (ainda me limitando à sua ideia original, no entanto):
https://pastebin.com/cPjF5Rb8
Ainda não é o ideal para o sistema, seria interessante adicionar várias outras características à este. Entretanto, considerando que mantive a simplicidade dele, acho que isso servirá como um bom material de estudo para te guiar nos seus próximos sistemas.

Obrigado, Jorge_Maker! Vou estudar com o material, mas não sei se quero dar CTRL+C CTRL+V nos métodos ou coisa do tipo (e acredito que não seja esse o intuito de você ter feito) :ded:.

Bem, mesmo assim, MUITO obrigado, Jorge Maker!!!  :XD:
^~^) -Rhyan.