🤔 Para Refletir :
"Fazer um jogo é sempre muito mais difícil do que jogar um jogo..."
- Rafael_Sol_MAKER

As variáveis - Tutorial IV

Mayleone Feminino

Conde
Membro
Membro
Console.Write("Hello World!");
Juntou-se
25 de Outubro de 2016
Postagens
267
Bravecoins
3.095
[box class=catbg4]
yncEj.png

Atribuindo valores às variáveis.
[/box]


[box class=catbg4]Definição de valores:[/box]
Na aula passada você aprendeu a usar condições com as variáveis, e na primeira aula como atribuir números às variáveis.
Nesta aula iremos usar de tudo um pouco que foi aprendido até aqui. Só que hoje iremos aprender como atribuir informações às variáveis.
Que informações seriam essas?

00.png


Quando você marca a caixa “constante” nas variáveis, você está atribuindo a elas números inteiros. A partir do momento que marcar outras caixas que não seja a de constante, você estará atribuindo informações às variáveis, e não apenas números.
Sim, os números também são informações, só que eles são apenas definidos como um número que poderá aumentar ou diminuir o seu valor, já as informações armazenam coordenadas, IDs de mapas, HP do herói, e diversas outras informações que iremos ver nesta aula. Elas são informações numerais também, porém elas armazenam algo além de números, que podem funcionar de maneiras diferentes no RPG Maker.
Vamos estudar cada uma delas?

Variável – Como já explicado na aula anterior, você poderá armazenar aqui uma segunda variável.


[box class=catbg4]Variável aleatória:[/box]
Aleatório – Você irá escolher um número qualquer para iniciar os comandos desta informação, e outro número para finalizar.
Um exemplo prático: Crie um NPC no mapa e escolha uma variável que não esteja sendo utilizada e a coloque o nome de “Diálogo”. Depois vá à opção “aleatório” e dentro dos boxes coloque de 1 até 5:

0.png


Agora crie uma condição e coloque para que quando a variável “Diálogo” estiver igual à 1 uma mensagem assim apareça : “Bom dia”.
Faça o mesmo outra vez, só que dessa vez coloque para que quando a variável “diálogo” esteja igualada a dois, outra mensagem apareça.

Faça o mesmo procedimento até que a variável “diálogo” fique igualada a cinco. Não se esqueça de ir alternando as mensagens:

1.png


Agora rode o teste do jogo e vá falar com o NPC no mapa para ver o que acontece.
A cada momento o NPC diz algo diferente, certo? Isso acontece porque com a opção: Aleatório, a variável desejada vai mudando o seu valor aleatoriamente conforme as constantes que você impôs.
Por exemplo: Eu coloquei para que a variável “diálogo” fique mudando para as constantes de 1 até 5, ou seja, ela nunca irá mudar para 6 ou outro número maior que cinco. Bem como, nunca irá mudar para zero ou outro número menor que um. (Vulgo números negativos).
A opção ‘aleatório’ é excelente para deixar o jogo mais dinâmico, e evitar-nos ficarmos na mesmice, fazendo assim nem seu programador saber o que irá acontecer. Por exemplo, com o que fizemos aqui, esse exemplo de o NPC falar algo aleatoriamente o tempo todo, você sabe quando ele irá dizer “bom dia”, ou “Tchau”? Não sabe, correto? Essa é a intenção desta opção.
Mais tarde, tente substituir os comandos de mostrar mensagens, por outros comandos de eventos em cada condição de constante aleatória. Teste também fazer mais de cinco opções de aleatoriedade, por exemplo, ao invés de deixar somente de 1 até 5, tente deixar o valor que preferir (podendo utilizar também o zero e valores negativos).
O máximo que você pode chegar é de -99999999 até 99999999. Mas acho que não terá alguém no mundo que usará tudo isso.


[box class=catbg4]Item:[/box]
Item – Aqui você poderá armazenar um item do banco de dados, numa variável.
Vamos a um exemplo: Você quer fazer com que quando o jogador tiver 20 (vinte) unidades de um determinado item, uma mensagem escrita: “Parabéns, você tem vinte itens de tal” apareça.
Para isso acontecer, crie um evento qualquer no mapa em processo paralelo, que utilize o comando “mudar item >> Poção >> Adicionar >> Constante: 1.” Dentro de um ciclo, que se atualiza à cada 5 frames.

2.png


Depois, acima da opção “mudar item” dentro do ciclo, utilize o comando de opções de variáveis, escolha uma variável que não esteja sendo utilizada, e coloque seu nome de “poção”.
Em “operando” selecione a opção “Itens” e escolha o primeiro item. Pronto, a variável “poção” está armazenando o item “poção”.
Agora, abaixo da variável “poção” nos comandos de eventos, crie uma condição de que quando a variável “poção” estiver igualada a 20, o comando “Ir para label” com o nome de “fim de ciclo” entre em ação:

3.png


Agora, abaixo do “Fim do ciclo” coloque a label “fim de ciclo” e depois o comando “romper ciclo” seguido do comando “mostrar mensagens”, como esta mensagem escrita: “Parabéns! Você tem 20 poções!”. Após todos esses comandos, utilize o “apagar evento temporário”, para que a mensagem só se reproduza uma vez, e dê ok.

4.png


Rode o teste do jogo e espere um pouco: Quando você tiver 20 poções, a mensagem de parabéns irá aparecer. E isso ocorreu porque você armazenou numa variável a poção do banco de dados, e como o ciclo te dá uma poção à cada 5 frames, quando você chegar à vinte poções, o ciclo será rompido (não lhe dará mais poções) e a mensagem aparecerá.
A variável armazenando a poção serviu para que pudéssemos fazer a condição de 20 poções.


[box class=catbg4]Herói e inimigo:[/box]
Herói – Nesta opção você poderá armazenar numa variável as opções do herói, como sua quantidade de HP, MP, Nível, e etc...
Nesta opção, você poderá também escolher qual herói específico do banco de dados, que irá armazenar essas opções.
Para visualizar as informações do herói que poderão ser atribuídas numa variável, basta clicar na setinha (v) do Box onde está escrito “nível”:

Untitled%25201.png


Como mostrado na figura acima, você poderá atribuir os valores de nível, exp (experiência), HP, MP, HP. Máx, MP. Máx, Força, Destreza, Agilidade, Magia, Ataque, Defesa Física, Defesa mágica e a opção de ‘’fugir’’ das batalhas, dentro de uma variável.
Com essas opções armazenadas numa variável, você poderá definir condições com as mesmas.
Por exemplo: Se o HP do herói chegar a zero, o jogo dará game over.
Para você poder criar a condição do HP zerado, você precisará armazenar o valor do HP do herói numa variável, e depois criar uma condição com a variável do HP igualada à zero, e o comando de game over:

Untitled%25202.png


Há inúmeras coisas que podemos fazer com essas condições e com esses valores dos heróis armazenados numa variável, basta utilizá-los de forma correta, conforme for a sua necessidade na hora de programar.
Se desejar um exemplo mais específico no que podemos utilizar essas informações, dê uma rápida lida neste tutorial Clique aqui. Onde o mesmo ensina a criar uma HUD rápida em quatro passos, utilizando operações matemáticas (aula 2) e informações nas variáveis.

Inimigo – Essa opção tem a mesma função da opção “herói”, só que dessa vez ela trabalha com os inimigos do banco de dados, na hora das batalhas.
Assim como na opção do herói, você poderá selecionar um inimigo especifico do banco de dados, para trabalhar e suas informações, clicando na setinha do Box onde está escrito “Hp”:

Untitled%25204.png


Na maioria das vezes, trabalhos com essas opções se estivermos utilizando o sistema de batalha padrão do RPG Maker, e esses comandos são trabalhados no banco de dados, na aba “grupo de inimigos”:
Untitled%25205.png

Eu creio que não precisarei entrar em maiores detalhes, pois as funções são as mesmas da opção de herói, que já foi explicada anteriormente.


[box class=catbg4]Evento:[/box]
Evento – Essa opção é interessante, pois iremos não só trabalhar com o personagem do mapa, mas também com qualquer outro evento no mesmo. E isso você poderá notar se clicar na setinha do Box escrito personagens. Lá você verá que poderá selecionar eventos do mapa, para atribuírem valores a serem armazenados numa variável.
Esses valores poderão ser vistos ao clicar na setinha do Box, cuja primeira opção é “Coord X”:

Untitled%25206.png


Definição dos valores de informações:
Coord X ? Armazena a coordenada X do personagem ou evento no mapa.
Coord Y ? Armazena a coordenada Y do personagem ou evento no mapa.
Se não entendeu ambas as opções acima, não se preocupe elas serão melhores explicadas na próxima aula.

Direção ? Armazena numa variável a posição atual em que um evento ou um personagem se encontra no mapa, sendo o valor (2) olhando para baixo, (4) olhando para a esquerda, (6) olhando para a direita e (8) olhando para cima:

Untitled%25207.png


? Coord X. da Imagem e Coord Y da imagem, irão armazenar os valores das coordenadas de uma determinada imagem que esteja na pasta ‘’Pictures’’ do seu projeto.
E finalmente a última opção: ? Mapa.
Essa opção irá armazenar o valor de um determinado terreno no mapa.
Faremos um breve exemplo: Vamos supor que quando o personagem pisar sobre a grama “mais amarelada” no mapa, dê game over.

A grama que me refiro seria essa: 
Untitled%25208.png
(a quadriculada em vermelho) do mapa 1(um) do tileset do RTP.
Primeiramente, iremos mapear a área do mapa, pode ser algo bem simples mesmo:

Untitled%25209.png

A área com o gramado em verde é segura, porém a área mais amarelada não, pois se pisarmos sobre ela, dará game over.
Iremos então colocar em prática nosso objetivo: Deixar o terreno perigoso.
Crie agora um evento no mapa em processo paralelo, e logo em seguida vá até as opções de variáveis escolha uma que não esteja sendo usada dê um nome para ela, e logo em seguida vá a evento >> mapa:


Untitled%252010.png


Dê ok nesse evento, e agora abra o banco de dados, e vá na aba de tilesets:
No mapa 1 do RTP, clique na opção de “terreno”:

Untitled%252011.png

Agora vá ao gramado amarelo, e dê um clique sobre ele, até que ele fique com o número um:

Untitled%252012.png


Certo! Agora a grama amarelada tem como terreno o número um.
Dê ok, e volte para aquele comando que está armazenando um terreno:
Agora crie uma condição, utilizando a mesma variável que você utilizou para armazenar um terreno ao personagem, e deixe sua constante igual a 1:

Untitled%252013.png


Dentro dessa condição, coloque o comando de esperar 20 frames, e logo após chame o comando de game over, e rode o teste do jogo.
Quando você pisar sobre a grama amarela, o game over é chamado, certo?
Isso ocorre porque você armazenou um terreno no personagem, e no banco de dados você configurou que a grama amarelada tivesse o terreno de número 1.
Aquela condição do evento faz com que quando o personagem estiver no terreno armazenado, que no caso é o um, o game over apareça.
Você poderá também colocar mais de um terreno, basta armazená-los em variáveis diferentes, com números de terrenos (IDs) diferentes.



[box class=catbg4]Outro:[/box]
Outro – Clicando sobre o seu Box, você poderá visualizar as seguintes opções:
Untitled%252014.png


Essas opções valem apenas para os heróis do banco de dados, e irei explicar cada uma:

ID ? Armazena numa variável o ID de um determinado mapa.
Número de personagens ? Armazena o valor da quantidade de personagens que estejam no grupo.
Dinheiro ? Armazena o valor de dinheiro (G) que os personagens possuem.
Nº de passos ? Armazena a quantidade de passos dados pelo herói.
Tempo de jogo ? Se você for perceber que ao entrar no menu, há um contador que mostra o tempo em jogo. Essa opção armazena esse tempo.
Timer ? Essa opção armazena as informações de um contador do jogo, configurado por você.
Nº de saves ? Armazena a quantidade de “saves” que o jogador deu, no decorrer do jogo.

Essas opções podem ser usadas de diversas formas, e eu acho que eu não preciso entrar em detalhes quanto a elas, basta armazenar seus valores numa variável, e utilizar uma condição para criar determinadas ações com essas opções.



[box class=catbg4]Fim da quarta aula:[/box]

Por enquanto o que temos é isso, em breve as outras partes dessa aula serão postadas, aguardem!
Qualquer dúvida em relação à esta aula, podem postar no tópico.
 
Olá! Muito bons, seus tutoriais! Estou acompanhando todos. Estou FINALMENTE aprendendo a mexer com variáveis.
Só queria perguntar umas coisas e dizer que nessa parte, onde tem o link, vai para o site do Mundo RPG Maker.

[error]Se desejar um exemplo mais específico no que podemos utilizar essas informações, dê uma rápida lida neste tutorial Clique aqui. Onde o mesmo ensina a criar uma HUD rápida em quatro passos, utilizando operações matemáticas (aula 2) e informações nas variáveis.[/error] E eles não estão mais com o site online. Então, quando tento clicar, aparece erro "404 Page not found."

Agora, as minhas perguntas sobre o tutorial em si:

Quais são as funcionalidades do "Label"?
Só para interromper ciclos?
Eu vi que você usou no outro tutorial, mas pareceu meio inútil (desnecessário). Pra que serve ele?

Nessa parte, onde fala sobre a aba dos grupos de inimigos, tem uma caixa onde dá pra colocar eventos neles.
Dá pra fazer esses negócios de variáveis lá tbm?
De que maneira?


Untitled%25205.png

E, por fim... Eventos comuns... Quais seriam as utilidades deles? Dá pra usar eles com variáveis, certo?

Enfim... É isso aí. Desculpe por tantas perguntas. É que eu realmente estou curioso.
Se quiser, pode responder minhas perguntas nos próximos tutoriais... Quem sabe?
 
InterPlay comentou:
Quais são as funcionalidades do "Label"?
Só para interromper ciclos?
Eu vi que você usou no outro tutorial, mas pareceu meio inútil (desnecessário). Pra que serve ele?
Labels servem para você marcar determinadas partes do seu evento, para poder pular diretamente para aquela parte a partir de outro ponto do evento.

Código:
?Text?2k_Enryuu(4), Window, Bottom
?    ?Oi, tudo bem? Como vai?
?Text?2k_Datz(0), Window, Bottom
?    ?Olá, tô bem, e tu?
?Text?2k_Enryuu(4), Window, Bottom
?    ?Tô de boa na lagoa.
?Text?2k_Datz(0), Window, Bottom
?    ?Que bom.
?Label?QUESTÃO
?Text?2k_Enryuu(4), Window, Bottom
?    ?Mas então, sobre o que você queria conversar?
?Show Choices?Sobre aboboras, Sobre brocolis, Sobre a lua, Sobre Kant, Nada não. (Window, Right, #1, #2)
?When Sobre aboboras 
  ?Text?2k_Enryuu(4), Window, Bottom
  ?    ?BLABLABALBLA
  ?Jump to Label?QUESTÃO
  ?
?When Sobre brocolis 
  ?Text?2k_Enryuu(4), Window, Bottom
  ?    ?BLABLABALBLA
  ?Jump to Label?QUESTÃO
  ?
?When Sobre a lua 
  ?Text?2k_Enryuu(4), Window, Bottom
  ?    ?BLABLABALBLA
  ?Jump to Label?QUESTÃO
  ?
?When Sobre Kant 
  ?Text?2k_Enryuu(4), Window, Bottom
  ?    ?BLABLABALBLA
  ?Jump to Label?QUESTÃO
  ?
?When Nada não. 
  ?Text?2k_Enryuu(4), Window, Bottom
  ?    ?ok tchau
  ?
?End

Nesse exemplo, as opções de dialogo ficariam voltando para o inicio da questão (sem repetir o começo do dialogo). Mas existem outras formas de atingir a mesma finalidade.

Em geral, para tudo que dá para fazer com Label e Jump to Label, existe alguma outra forma de fazer. E, em geral, essa outra forma é preferível. Isso é um paralelo ao "goto" de programação em geral, que também é extremamente situacional e geralmente não é recomendável o uso.

Usar Label como uma forma de pular para fora de um loop é a forma mais comum dentro do RPG Maker, e a mais tolerável em geral.

Nessa parte, onde fala sobre a aba dos grupos de inimigos, tem uma caixa onde dá pra colocar eventos neles.
Dá pra fazer esses negócios de variáveis lá tbm?
De que maneira?
Dá sim; basicamente tudo que você faz em um evento de mapa você pode fazer nos eventos de batalha (exceto coisas como movimentação no mapa, que não fariam sentido nesse contexto).

A caixa de cima é a condição para quando você quer rodar esse evento dentro da batalha - por exemplo, quando o HP do inimigo estiver baixo ou coisa assim. O span é o escopo da condição; por exemplo, se o span estiver como Batalha, o evento só vai rodar uma vez na batalha quando a condição for cumprida. Se for turno, ele vai checar a cada turno. Se for momento, vai checar o tempo todo. Mecanismos como variáveis e switches podem ajudar a controlar melhor isso.

f26ade7f9a.png


Nesse exemplo, a cada quatro turnos de combate, o inimigo #3 Slime recuperaria um valor aleatório entre 200-400 HP. Como isso é uma variável, daria pra fazer coisas mais interessantes aqui; por exemplo, talvez algumas ações que os personagens pudessem ter tomados iriam alterar esse valor. Talvez pudéssemos checar se os ajudantes do Mega-Slime ainda estão vivos, e caso eles tenham morrido, a regeneração pode ser menor. Coisas assim.

E, por fim... Eventos comuns... Quais seriam as utilidades deles? Dá pra usar eles com variáveis, certo?
Eventos Comuns são extremamente úteis. Sempre que você precisar de um evento que não esteja atrelado especificamente a um único mapa ou a um único combate, você pode criar ele como Evento Comum. Eles vão rodar sempre que as condições para que rodem estejam OK, ou sempre que algum comando pedir para que sejam executados (seja o comando de evento que chama Evento Comum, ou itens, ou skills, etc.)
Você pode, por exemplo, criar um sistema de passagem do tempo que fica ativo constantemente, guardando a hora do dia e afins em variáveis, e deixar rodando como Evento Comum.
Ou você pode criar skills com efeitos interessantes e complexos que precisam fazer checagens de condições; você cria toda essa lógica no Evento Comum, e a skill chama tal evento quando usada.
Ou simplesmente tarefas repetitivas que seriam usadas em mais de um mapa, pode colocar como Evento Comum ao invés disso.
 
São exatamente o que eu pensei que seriam, então... Hm... :Plano: Interessante.
Mas quer dizer que, só de, por exemplo, eu apertar uma tecla determinada, o evento comum já rodaria?

Por exemplo:
Eu fiz esse evento dentro do mapa:

Evento%2B1.png

E fiz esse Evento Comum onde o personagem teleporta alguns metros de distância cada vez que aperta determinada tecla:
Evento%2BComum.png

Mas, de acordo com o que você disse:
Ellye comentou:
Eles vão rodar sempre que as condições para que rodem estejam OK, ou sempre que algum comando pedir para que sejam executados (seja o comando de evento que chama Evento Comum, ou itens, ou skills, etc.)

Eu não precisaria de fazer em todo mapa o evento que o chama?
Só de apertar a tecla, já dá pra fazer o evento comum acontecer?

Se for assim é bom demais!
 
InterPlay comentou:
São exatamente o que eu pensei que seriam, então... Hm... :Plano: Interessante.
Mas quer dizer que, só de, por exemplo, eu apertar uma tecla determinada, o evento comum já rodaria?

Por exemplo:
Eu fiz esse evento dentro do mapa:

Evento%2B1.png

E fiz esse Evento Comum onde o personagem teleporta alguns metros de distância cada vez que aperta determinada tecla:
Evento%2BComum.png

Mas, de acordo com o que você disse:
Ellye comentou:
Eles vão rodar sempre que as condições para que rodem estejam OK, ou sempre que algum comando pedir para que sejam executados (seja o comando de evento que chama Evento Comum, ou itens, ou skills, etc.)

Eu não precisaria de fazer em todo mapa o evento que o chama?
Só de apertar a tecla, já dá pra fazer o evento comum acontecer?

Se for assim é bom demais!
No seu exemplo, tem dois poréns:

O evento do mapa precisaria ser um Processo Paralelo, para ele ficar o tempo todo esperando o jogador apertar a tecla C e cumprir a condição.
E, dessa forma, esse evento precisaria existir sim em todo mapa.

Mas há uma solução!

nL58IVp.png


Se você marcar o Evento Comum como sendo "Paralelo", ele estará em execução constantemente, o tempo todo, desde que o Switch marcado esteja ON. Ou seja, ele estará o tempo inteiro checando essa condição de comando do jogador. Tudo que você precisa é ligar esse switch uma única vez (e desligar em situações em que você não quer permitir teletransporte).

Você pode até facilmente adicionar um período de "cooldown" no teleporte através de eventos comuns paralelos também, com o comando de Espera.
 
[member=1047]InterPlay[/member]
Todos os comandos de eventos do RPG Maker, entre eles labels, ciclos, eventos comuns, opções de batalhas e diversos outros serão explicados nos próximos tutoriais que em breve estarei postando por aqui, mas com as explicações de [member=394]Ellye[/member] creio que tenha dado para entender mais ou menos do que cada um se trata, não?

Sobre o link quebrado, me desculpe pela desatenção de não alterá-lo!
O link para o tutorial sobre a HUD é este aqui:
http://centrorpg.com/index.php?topic=174
 
Voltar
Topo Inferior