Centro RPG Maker

Centro de Suporte => Suporte Geral => Suporte para RPG Maker 2000/2003 => Tópico iniciado por: [COB] online 18/06/2020 às 11:21

Título: Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 18/06/2020 às 11:21
Olá pessoal!

Estou tentando implementar uma barra de carregamento, que vai sendo preenchida conforme o jogador aperta uma tecla, repetidamente, durante um período de tempo. (Estou utilizando o RPG Maker 2000).

Visualmente, o preenchimento da barra se da através de pictures.

Estou tendo problema com uso do timer. Eu gostaria que, se o jogador não apertasse a tecla, a barra fosse diminuindo gradativamente com o passar do tempo. E quanto mais vezes o jogador apertar a tecla, mais rápido a barra se enche.

P. ex.: 3 apertos na tecla, em 1 segundo, fazem a barra subir um grau. Se não houver aperto de tecla ou demorar a apertar, a barra diminui.

(https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcTvVkCJqKnyl1YmqNFAZ_AkbxBZSAOGVRL8xFZpD4oJnaan3iRr&usqp=CAU)
*Imagem meramente ilustrativa.

O que eu consegui fazer até o momento é que a cada aperto da tecla, a barra carregue um estágio. E que após um período determinado de tempo, caso cheia, a barra some.

Alguém saberia/poderia me ajudar?

Grato.
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: Avenger_B7 online 18/06/2020 às 12:08
Eu não lembro como fiz isso, mas provavelmente foi por Destiny Script. Por eventos, eu não faço ideia, no momento.

Dá uma olhada nesse link, espero que possa te ajudar: MK2k Mortal Kombat Pack (http://caveirarpgmaker.weebly.com/recursos-rpg-maker-2000/mk2k-mortal-kombat-pack).

Esse sistema tá presente em um dos mini-jogos do Mortal Kombat, e eu recriei essa parte há um bom tempo.

Há dois sites meus que você pode conhecer mais sobre o Destiny Script e o que eu gosto de fazer no 2k usando ele.

Caveira RPG Maker (http://caveirarpgmaker.weebly.com/)

Unique Destiny (http://uniquedestiny.weebly.com/)

Qualquer dúvida, estou à disposição.
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 23/06/2020 às 12:10
Obrigado pelo retorno, Avenger_B7!

Não tenho afinidade com o Destiny Script, mas com ctza olharei o conteúdo do link com mais detalhe!

A idéia seria algo por eventos mesmo, mas...

Valeu!!!
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: Dr.XGB online 24/06/2020 às 10:57
Uma dica que eu dou para esses tipos de sistemas que manipulam entrada de teclas é: separar o método das teclas em uma thread. O que isso significa? Uma bandeira de pirata? Não! É nada mais e nada menos que você colocar em um processo paralelo rodando junto com o sistema em si.
Eu fiz um programinha básico aqui pra vc ver como que ficaria seu sistema. Como os requisitos da sua dúvida foram bem precisos, tive a minuciosidade em atender cada detalhe dado pelo seu exemplo. É claro que vc pode alterar do jeito que vc preferir e o código já está programado justamente para facilitar sua manutenção. Além é claro do fato de ter separado os métodos em Eventos comuns também ajudou no print porque a quantidade de linhas encaixaram certinho dentro de uma tela só.  :XD:

Primeiro eu fiz a inicialização dos valores trabalhados neste sistema. Este evento será o entrypoint do seu sistema.Para que o mesmo se inicie, basta você chamar este primeiro evento comum.
(https://i.imgur.com/57ygi0X.png)

Este é o loop principal do seu sistema. Aqui teremos 3 etapas:
(https://i.imgur.com/g7whkyi.png)

Método responsável por fazer o decremento da barra.
(https://i.imgur.com/EDAno4G.png)

Método responsável pelo incremento da barra.
(https://i.imgur.com/aS1VnAY.png)

Aqui é o método que vai tratar a velocidade das teclas pressionadas. Paralelamente a este método, um outro método está acontecendo em outra thread (logo após esse print). Esse método fará um loop de 1 segundo. Como é um sistema que exige velocidade da parte do usuário, eu precisei armazenar o tempo em uma variável. Enquanto o método Wait a gente consegue manipular décimos de segundo, agora nós vamos trabalhar com centésimos de segundo, o que vai melhorar ainda mais a precisão do seu sistema.

Se o jogador pressionar a tecla pelo menos 3 vezes dentro deste intervalo, a barra será incrementada. Se ele conseguir pressionar 6 vezes em 1 segundo, incrementará para 2. Essa variação depende de valor que armazenamos em [0003: keysPerPoint]. Se você quer que o jogador precise pressionar mais rápido, basta aumentar esse valor. Se você achou que ficou rápido demais e precisa abaixar o ritmo, basta diminuir aquele valor que este método se comportará de forma dinâmica.

Lembre-se: 1 segundos = 100 cents (centésimos de segundo).
Além do mais, há uma peculiaridade logo no final. Muita gente fala que o Wait de 0.0s não vale nada. Muito pelo contrário. Um wait de 0.0s equivale a aproximadamente 15 milésimos de segundo, que é o tempo suficiente do seu processador dar aquela bufadinha antes de receber o próximo processo. E como variáveis do RPG Maker não trabalha com pontos flutuantes, precisamos arredondar para um número inteiro, sendo assim o seu ciclo será incrementado a 2, para arredondar 15 milésimos para 20 milésimos.
(https://i.imgur.com/HWrDsaA.png)

Essa é a thread que invocamos lá no momento da inicialização do sistema, ativando o switch [0002: keyThreadEnabled]. Este método vai receber a quantidade de vezes que a tecla ENTER foi pressionada. Para prevenir que o jogador trapaceie mantendo a tecla pressionada, programei de tal forma onde a entrada da tecla será validada somente se o jogador apertar e soltar utilizando uma pequena técnica como pode ver no print abaixo.
Este evento, por estar em uma outra thread, ocorrerá em paralelo ao loop principal do sistema, portanto não há de se preocupar com este loop pois ele não afetará o loop principal.
(https://i.imgur.com/SvnmEuo.png)

Este evento aqui vai tratar e validar o estado da barra. Se a barra estiver cheia, o sistema se encerra, senão o loop continua. Aqui você pode dar um feedback dizendo que a barra foi cheia, ou simplesmente ir para o próximo processo. Eu não sei se isso está em uma batalha ou em um mini-game, mas eu recomendo que aqui você apenas quebre o loop e em um outro evento você faça a próxima etapa do seu jogo para que consiga reaproveitar esse sistema em outros momentos no seu jogo.
(https://i.imgur.com/YprTRr8.png)

Basicamente foi isso que eu pensei.
Espero que tenha conseguido resolver seu problema.
Qualquer dúvida, é só responder aqui.

Abraço!
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 26/06/2020 às 11:15
Incrível, Dr.XGB!

Muito obrigado pelo seu tempo, pelo nível de detalhes e pela boa vontade!

Independente de eu conseguir implementar ou não, vc merece um ouro por cada evento demonstrado rsrs

Vou seguir o passo a passo minuciosamente!

Em breve eu volto para dar a notícia se consegui fazer dar certo por aqui..

Obrigado mesmo!

Abração!!
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 04/07/2020 às 21:05
Voltei!

Mas tô com outro imbróglio agora...

Como conciliar este sistema com as pictures da barra? (Tenho 15 pictures que mostram o crescimento da barra e não tô sabendo como devo inseri-las neste sistema)

Alguma luz, doc.XGB? Abraço!
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: Dr.XGB online 04/07/2020 às 22:34
Citação de: [COB] online 04/07/2020 às 21:05
Voltei!

Mas tô com outro imbróglio agora...

Como conciliar este sistema com as pictures da barra? (Tenho 15 pictures que mostram o crescimento da barra e não tô sabendo como devo inseri-las neste sistema)

Alguma luz, doc.XGB? Abraço!

Neste caso, as pictures podem ficar em uma outra thread, ou seja, um outro evento comum em processo paralelo, onde vc vai determinar qual será a imagem a ser mostrada de acordo com o valor da barra. Para que seu sistema funcione de acordo com o gráfico das barras, o valor máximo precisa ser 15 pra bater certinho.
Essa thread será acionada quando o switch [0001: BEGIN] for acionado. Ou vc pode criar seu próprio switch, mas não se esqueça de ativar no momento em que o sistema for chamado e desativar quando o sistema se encerrar.

Exemplo:

<> IF [0001: barValue] == 0
  <> Mostra a picture da barra vazia
: ENDIF
<> IF [0001: barValue] == 1
  <> Mostra a picture da barra com 1 ponto
: ENDIF
...
<> IF [0001: barValue] == 15
  <> Mostra a picture da barra cheia
: ENDIF
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 06/07/2020 às 22:10
Obrigado pelo retorno, Doc.!

Infelizmente ainda tô falhando na missão.. xD

Vou descrever exatamente o processo:
- Um evento de batalha acabou de ser encerrado (por herói derrotado ou inimigo com 50% de hp). ✓
- Charset do herói caido no chão. ✓
- Mostrar na tela a picture com a barra de carregamento e indicar ao jogador que deve apertar enter até a barra carregar completamente, durante 5 segundos ( tá mais ou menos/fail) ×
- Se o jogador conseguir carregar a barra em 5 segundos, o herói levanta e pode tentar combater de novo. Caso contrário, Game Over (tá mais ou menos/fail) ×

A situação é essa aí. Eu consigo fazer a barra aparecer mas tô falhando miseravelmente em fazê-la funcionar.

Eu segui o passo que vc praticamente desenhou pra mim, mas posso ter interpretado algo errado, sei lá.. (tô usando a versão do don Miguel então as nomenclaturas tão diferentes).

Se facilitar me ajudar, posso fazer umas prints do que eu fiz..

No mais, gostaria de parabeniza-lo pelo curso que está fazendo no YouTube! Já tô inscrito no canal e acompanhando!

Abraço!
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: Dr.XGB online 07/07/2020 às 13:36
Isso, os prints vão me ajudar a achar o problema mais rápido.

Pelo que entendi agora, vc chamou a barra de pictures mas o sistema não acontece, certo?

No momento em que a barra aparece para começar o sistema, o evento comum BEGIN foi chamado? Pois é ele que dará a entrada para o sistema todo acontecer.

Sobre o último item, você vai ter que precisar fazer um contador de 5 segundos em uma outra thread quando este sistema for chamado, ou seja, quando o switch [0001: BEGIN] for ativado. Aí esse contador precisa ser com variável. Se usar Wait de 5.0s, pode bugar seu sistema, então por segurança é bom fazer um contador, igualzinho no evento GetKeyPressAmount, só que com outras variáveis e com a condição pra 500.

Lá no Evento BEGIN, você coloca:
<> Change Variable: [xxxx: <nome da sua variável>] - Set 500

Vamos fazer agora um contador regressivo. Crie um novo evento comum de Processo Paralelo, cujo switch para rodar essa thread é [0001: BEGIN] esteja ativado.
<>IF [xxxx: <nome daquela variável declarada>] - 0 below (padrão Rm2k 1.07, do Don Miguel)
  <> Game Over
  <>
: END
<> Change Variable: [xxxx: <nome daquela mesma variável>] - 2 (subtrai a variável pra 2 pra dminuir 1 centésimo de segundo)
<> Wait: 0.0s
<>


Se o problema ainda persistir, manda um print das linhas de comandos pra poder fazer uma análise mais profunda do problema  :ok:
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 15/07/2020 às 11:08
Opa! Voltei Doutor!

E trouxe as prints rsss

Por favor, assim que puder, dê uma olhada e me ajude a encontrar o erro.. No editor de evento no mapa, após o comando Start Battle, estou usando o Call Event InicioBarra.. está correto?


EVENT: InicioBarra
(https://i.imgur.com/dccNMwx.jpg)

EVENT: BarUpdate
(https://i.imgur.com/a24LHin.jpg)

EVENT: BarDecrease
(https://i.imgur.com/YSV7XWV.jpg)

EVENT: BarIncrease
(https://i.imgur.com/oiZ1Dyr.jpg)

EVENT: GetKeyPressAmount
(https://i.imgur.com/hGi6PkS.jpg)

EVENT: KeyThread
(https://i.imgur.com/2azYEZ2.jpg)

EVENT: CheckBarValue
(https://i.imgur.com/muk6VaJ.jpg)

EVENT: ChargeBar
(https://i.imgur.com/n3wc93O.jpg)

Já estou ansioso pelo Módulo II do seu curso no Youtube!!!

Abração!
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: Dr.XGB online 15/07/2020 às 11:54
Achei alguns erros na implementação do código:

Citação de: [COB] online 15/07/2020 às 11:08
EVENT: GetKeyPressAmount
(https://i.imgur.com/hGi6PkS.jpg)



Citação de: [COB] online 15/07/2020 às 11:08
Já estou ansioso pelo Módulo II do seu curso no Youtube!!!

Abração!
Que bom que vc tá curtindo o curso. Basicamente estou quase acabando de gravar o módulo I inteiro. A partir da semana que vem deixaremos a teoria e começaremos com os exercícios  :XD:
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 27/07/2020 às 12:19
Opa! Obrigado pelo retorno, Doc.!

O evento já teve uma evolução considerável! Mas ainda estou tropeçando em algumas coisas, veja só:

1- Eu gostaria que a contagem do timer aparecesse na tela, para que o jogador saiba que ele tem tempo para executar a ação de apertar o botão. (Eu chamei a função do timer e marquei a opção para aparecer na tela (Ta OK). MAS essa função está num evento à parte (no mapa). Pode ser aí mesmo ou há algum lugar mais indicado no sistema da BARRA pra "chamar" esse timer? (Ta funcionando legal mas não sei se pode causar algum lag.)

2- A única questão envolvendo a barra que ainda não ta ok, é o fato dela não diminuir caso o botão não seja apertado. Tipo, se eu apertar o botão 3x em 1 seg, a barra sobe um grau (ta OK). Após isso se eu não apertar o botão, a figura da barra fica estática (ela não diminui) - Se eu apertar novamente o botão 3 vezes, sobe mais um grau (a figura da barra fica estática novamente)- e por aí vai.

A minha dúvida mesmo é como "chamar" as pictures da barra diminuindo (se um "else" no evento ChargeBar resolve) ou se devo fazer mais uma thread para isso.

Se puder dar uma luz aí, ficarei mto grato!


Tava agora mesmo acompanhando o curso e os videos de switches! Show de "boolean"!!!

Abraço.
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: Dr.XGB online 28/07/2020 às 13:13
Citação de: [COB] online 27/07/2020 às 12:19
1- Eu gostaria que a contagem do timer aparecesse na tela, para que o jogador saiba que ele tem tempo para executar a ação de apertar o botão. (Eu chamei a função do timer e marquei a opção para aparecer na tela (Ta OK). MAS essa função está num evento à parte (no mapa). Pode ser aí mesmo ou há algum lugar mais indicado no sistema da BARRA pra "chamar" esse timer? (Ta funcionando legal mas não sei se pode causar algum lag.)
Olha, por ser um evento de sistema, ou seja, que ele pode acontecer em qualquer mapa, é sempre recomendável chamar as funções via Evento Comum, que aí no mapa você só terá trabalho de chama-las através de um evento. Lag pode não causar, mas com certeza, muita dor de cabeça pra dar manutenção depois kkkkk !!

Citação de: [COB] online 27/07/2020 às 12:19
2- A única questão envolvendo a barra que ainda não ta ok, é o fato dela não diminuir caso o botão não seja apertado. Tipo, se eu apertar o botão 3x em 1 seg, a barra sobe um grau (ta OK). Após isso se eu não apertar o botão, a figura da barra fica estática (ela não diminui) - Se eu apertar novamente o botão 3 vezes, sobe mais um grau (a figura da barra fica estática novamente)- e por aí vai.

A minha dúvida mesmo é como "chamar" as pictures da barra diminuindo (se um "else" no evento ChargeBar resolve) ou se devo fazer mais uma thread para isso.
Nesse caso então, parece que gerou conflito na troca de imagem da barra ao pôr em outra thread. Então é mais seguro que esse evento que troca a imagem da barra não seja atualizada constantemente, mas sim chama-la sempre que a barra incrementar e decrementar. Em outras palavras, o evento ChargeBar deixará de ser Processo Paralelo e agora ele será do tipo Call. Aí lá nos eventos BarIncrease e BarDecrease, lá na última instrução de cada um, chame esse evento para que a barra seja atualizada.
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 07/08/2020 às 11:40
Fala, Doc.!

Tô eu garrado aqui de novo :ded:

Então... não funcionou não  :aiaiai: To quase largando pra lá e deixando do jeito que tá mesmo, com a barra estática. Visualmente não é exatamente o que queria mas ta aceitável rs

Agora outra coisa.. Junto com esse evento da barra, existe outro processo que é o de uma picture (escrito ENTER) piscando na tela, que indica que o jogador precisa pressionar rapidamente a tecla para carregar a barra.

Pra isso, fiz um loop, que é ativado pela switch BEGINBarra, rústicamente mostrado abaixo:

wait 0.1
Show picture
wait 0.2
Erase picture
wait 0.1

Só que essa "animação" (do ENTER piscando) ativada junto com o evento da barra, ta causando com um lagzinho.. A picture não some e aparece corretamente.

Alguma dica de como tentar melhorar isso? Tentei usar o "Call Event" (a picture roda sem travar, mas não to sabendo onde colocar esse Call pra rodar junto com a Barra).

Abraço!
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: Vixen online 07/08/2020 às 16:07
Citação de: [COB] online 07/08/2020 às 11:40

Pra isso, fiz um loop, que é ativado pela switch BEGINBarra, rústicamente mostrado abaixo:

wait 0.1
Show picture
wait 0.2
Erase picture
wait 0.1

Só que essa "animação" (do ENTER piscando) ativada junto com o evento da barra, ta causando com um lagzinho.. A picture não some e aparece corretamente.


Eu fiz algo parecido, mas não durante o jogo e sim na intro.
Ao invés de "mostrar imagem" e "apagar imagem" já tentou o "mostrar imagem" e "mover imagem"?

Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: Dr.XGB online 07/08/2020 às 17:15
Citação de: [COB] online 07/08/2020 às 11:40
Agora outra coisa.. Junto com esse evento da barra, existe outro processo que é o de uma picture (escrito ENTER) piscando na tela, que indica que o jogador precisa pressionar rapidamente a tecla para carregar a barra.

Pra isso, fiz um loop, que é ativado pela switch BEGINBarra, rústicamente mostrado abaixo:

wait 0.1
Show picture
wait 0.2
Erase picture
wait 0.1

Só que essa "animação" (do ENTER piscando) ativada junto com o evento da barra, ta causando com um lagzinho.. A picture não some e aparece corretamente.

Alguma dica de como tentar melhorar isso? Tentei usar o "Call Event" (a picture roda sem travar, mas não to sabendo onde colocar esse Call pra rodar junto com a Barra).

Abraço!

Estranho... Se botar em uma thread separada não era pra lagar porque você botou um intervalo de Wait muito bom pra não travar.
O que você pode fazer é colocar essa chamada no final do BarUpdate, só que agora o Wait vai quebrar o sistema. Nesse caso teria que substituir os Waits por uma contagem por variável, igual eu fiz pra programar o intervalo das teclas.

A dica do Vixen também é ótima. Ou até mesmo ao invés de apagar, um novo Show Picture porém com transparência 100%. Basicamente terá o mesmo efeito do Erase Picture, mas pode resolver.
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 07/08/2020 às 17:44
Citação de: Vixen online 07/08/2020 às 16:07
Eu fiz algo parecido, mas não durante o jogo e sim na intro.
Ao invés de "mostrar imagem" e "apagar imagem" já tentou o "mostrar imagem" e "mover imagem"?

Opa!

Então, na realidade eu nem usei o erase picture, eu chamei a mesma picture so que com 100% de transparência rsss

Mas vou testar essa método aí, quem sabe... Mas ainda acho que é muita coisas rodando junto ao mesmo tempo, por isso ta dando umas travadinhas..

Valeu Vixen!
Título: Re:Barra carrega ao apertar tecla - RM2K
Enviado por: [COB] online 07/08/2020 às 17:51
Citação de: Dr.XGB online 07/08/2020 às 17:15
Estranho... Se botar em uma thread separada não era pra lagar porque você botou um intervalo de Wait muito bom pra não travar.
O que você pode fazer é colocar essa chamada no final do BarUpdate, só que agora o Wait vai quebrar o sistema. Nesse caso teria que substituir os Waits por uma contagem por variável, igual eu fiz pra programar o intervalo das teclas.

A dica do Vixen também é ótima. Ou até mesmo ao invés de apagar, um novo Show Picture porém com transparência 100%. Basicamente terá o mesmo efeito do Erase Picture, mas pode resolver.

Valeu Doutor! Foi isso mesmo que fiz, um show picture com 100% de transparência hahah

Vou deixar esse Evento da Barra como sugestão de exercício avançado la pro seu curso do maker 2000, pq ta hard viu :lol:

Abração!