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

Condição por HP - Sistema de VIda

Iniciado por RaonyFM, 21/02/2019 às 09:14

21/02/2019 às 09:14 Última edição: 21/02/2019 às 18:26 por Corvo
Caríssimos,


Estou desenvolvendo um projeto no qual o personagem do jogador não apresenta barra de vida. Para indicar ao jogador o estado vital do personagem, pretendo fazer com que a tela vá ficando vermelha de acordo com a quantidade de HP perdida. Por exemplo, se o HP máximo do personagem é 100, ao sofrer um dano que o deixa com 75HP, a tela ficará levemente vermelha, se ele ficar com 50HP, o vermelho ficará mais forte e assim por diante. É um sistema semelhante ao utilizado no game Amnesia para medir a sanidade da personagem, mas aqui servirá para medir seu HP. Tentei mexer em variáveis e condições, mas não descobri como fazê-lo. Alguém saberia dizer-me como proceder?

Grato.
"A arte é o que resiste: ela resiste à morte, à servidão, à infâmia, à vergonha." (Gilles Deleuze)

21/02/2019 às 09:50 #1 Última edição: 21/02/2019 às 09:52 por Fpr
Em Controle de Variáveis, na seção dados do jogo e opção Ator, pode armazenar o valor do HP do personagem.

Pode dar o efeito de vermelhidão na tela por uma imagem com tom vermelho do tamanho da tela, aumentando a opacidade dela conforme diminui o valor da variável que recebeu o HP do personagem.

$game_map.screen.pictures[numero_da_imagem].show("Nome da Imagem", origem, x, y, zoom_x, zoom_y, opacidade, sinteticidade)


Exemplo de como ficaria no chamar script:
opacidade = 100 - $game_variables[1]
$game_map.screen.pictures[1].show("Nome da Imagem", 0, 0, 0, 100, 100, opacidade, 0)


Só ajustar os valores e a fórmula de cálculo para a opacidade da imagem, eu recomendaria usar o valor máximo da opacidade igual o valor máximo de HP, assim quando tiver cheio o hp a opacidade será zero e ficará transparente a imagem.

Para ficar mais otimizado em um processo paralelo, tudo dentro da condição Script(4ª aba, última opção no campo de condições):
$game_variables[1] != $game_actors[n].hp


Verifica se o valor da variável que receberá o valor de HP é diferente do HP atual do personagem, variável começa em zero vai ser diferente e rodar os comandos dentro da condição.

Depois o comando para igualar a variável ao HP, e o comando de call script para mostrar a imagem.

A partir daí, só rodará o que tem dentro da condição depois que o valor do hp for alterado ficando diferente do que tem na variável, e atualiza com o novo valor e opacidade da imagem, assim poupa de ficar mostrando uma imagem o tempo todo e só mostra quando há alteração no hp, que é quando mudará o tom da tela.
-

Citação de: Fpr online 21/02/2019 às 09:50
Em Controle de Variáveis, na seção dados do jogo e opção Ator, pode armazenar o valor do HP do personagem.

Pode dar o efeito de vermelhidão na tela por uma imagem com tom vermelho do tamanho da tela, aumentando a opacidade dela conforme diminui o valor da variável que recebeu o HP do personagem.

$game_map.screen.pictures[numero_da_imagem].show("Nome da Imagem", origem, x, y, zoom_x, zoom_y, opacidade, sinteticidade)


Exemplo de como ficaria no chamar script:
opacidade = 100 - $game_variables[1]
$game_map.screen.pictures[1].show("Nome da Imagem", 0, 0, 0, 100, 100, opacidade, 0)


Só ajustar os valores e a fórmula de cálculo para a opacidade da imagem, eu recomendaria usar o valor máximo da opacidade igual o valor máximo de HP, assim quando tiver cheio o hp a opacidade será zero e ficará transparente a imagem.

Para ficar mais otimizado em um processo paralelo, tudo dentro da condição Script(4ª aba, última opção no campo de condições):
$game_variables[1] != $game_actors[n].hp


Verifica se o valor da variável que receberá o valor de HP é diferente do HP atual do personagem, variável começa em zero vai ser diferente e rodar os comandos dentro da condição.

Depois o comando para igualar a variável ao HP, e o comando de call script para mostrar a imagem.

A partir daí, só rodará o que tem dentro da condição depois que o valor do hp for alterado ficando diferente do que tem na variável, e atualiza com o novo valor e opacidade da imagem, assim poupa de ficar mostrando uma imagem o tempo todo e só mostra quando há alteração no hp, que é quando mudará o tom da tela.


   Obrigado, meu caro! Consegui fazer com que a cor aparecesse conforme o HP diminuísse e desaparecesse quando o HP estivesse cheio. Contudo, ainda não entendi bem como fazer para alterar apenas a opacidade da imagem ao invés de ir sobrepondo elas. Poderia explicar novamente como fazer o cálculo da opacidade de uma mesma imagem de acordo com o valor da variável?

   Segue imagem do que consegui fazer até o momento:

Spoiler
[close]
"A arte é o que resiste: ela resiste à morte, à servidão, à infâmia, à vergonha." (Gilles Deleuze)

CitarObrigado, meu caro! Consegui fazer com que a cor aparecesse conforme o HP diminuísse e desaparecesse quando o HP estivesse cheio. Contudo, ainda não entendi bem como fazer para alterar apenas a opacidade da imagem ao invés de ir sobrepondo elas. Poderia explicar novamente como fazer o cálculo da opacidade de uma mesma imagem de acordo com o valor da variável?
Para fazer o efeito de ir escurecendo ao invés de mostrar a imagem direto naquele tom de vermelho?

Se for isso, da para mostrar a imagem pelo comando de eventos mesmo, com opacidade zero antes de dar inicio a esse sistema de mudar a opacidade de acordo com o HP e usar o chamar script referente ao comando mover imagem.
$game_map.screen.pictures[numero_da_imagem].move(origem, x, y, zoom_x, zoom_y, opacidade, sinteticidade, duração)


Chamando de exemplo:
opacidade = 100 - $game_variables[1]
$game_map.screen.pictures[1].move(0, 0, 0, 100, 100, opacidade, 0, 30)


30 = É o tempo em frames que levará para fazer a transição de uma opacidade a outra.

A fórmula de cálculo de opacidade pode ser qualquer uma, usei essa por considerar que a vida seria 100 e ser o mais simples, só subtrair o hp da opacidade, colocando igual a 100 o valor base da opacidade para o resultado da subtração dar zero quando o hp for igual a 100.

Seria exatamente como o comando de evento padrão e usar variáveis como parâmetros, só que não tem a opção de usar variável como opacidade só coordenadas, por isso a necessidade de usar por chamar script, mudando a forma de escrever o comando de mover imagem para poder usar variável como valor de opacidade.

Foi criado uma espécie de variável e nomeada como "opacidade", ela recebe o valor em função do HP do personagem e o usa como o parâmetro de opacidade. No lugar de definir como um número fixo, define como o valor que for obtido no campo "opacidade" que vai variar de 0 a 100.
-

Muito obrigado, FPR! Deu tudo certo por aqui, sistema funcionando perfeitamente. Podem trancar o tópico! ^_^
"A arte é o que resiste: ela resiste à morte, à servidão, à infâmia, à vergonha." (Gilles Deleuze)