Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Aula 10 - Charles Darwin estava certo.
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Aula 10 - Charles Darwin estava certo.
Galera, antes de começar, quero dizer, que gostou da aula anterior pode ter certeza da pra ficar melhor somente com mais alguns ajustezinhos:
Primeiro vamos criar uma font. Clique com o segundo botão em cima da pasta Fonts e em cima de create font, agora configure a fonte da seguinte forma:
Selecione a fonte Times New Romen e marcando Bold você coloca o testo desta fonte em negrito.
Agora volte em nosso obj_dano e no evento draw adicione o seguinte script antes do draw_text_color:
Com esse script você muda a fonte que seu jogo esta usando para aquela que você criou.
E para acabar vamos centralizar nosso texto. Por padrão ele começa centralizado no ponto direito superior de seu texto, mas para mudar isso é fácil e são dois comandos:
Esses são os códigos que conseguem modificar a centralização do texto de eu jogo, mas eles sozinhos não funcionam eles precisão de mais 5 contastes onde você fala onde você vai quer seu texto:
Como eu acho que deu para reparar draw_set_halign selecione a posição na horizontal e draw_set_valing seleciona a posição vertical. fa_right fa_left fa_top e fa_buttom são respectivamente a parte direita esquerda o topo e baixa do seu texto e fa_center e tanto o centro na vertical como na horizontal.
Agora depois de draw_set_text coloque o seguinte script:
Centralizamos nosso texto tanto na vertical como na horizontal.
Agora podemos passar para lição sobre leveis.
Existem muitos jeitos de se fazer um esquema de LVL alguns jogos usam funções logarítmicas para fazer seus LVLs em outros usam banco de dados onde é armazenado o tanto de experiência necessária para se passar para o próximo LVL. Mas neste tutorial aprenderemos a montar um esquema simples que é usado em alguns bons jogos como Pokémon e também Castlevania.
É meio complicado de entender no começo, mas quando virem como é bem inteligente o script vocês verão como é simples.
Abrão o obj_criador_vars e no evento create adicione as seguintes vars após a que já tem lá:
experiencia_total e level eu ate sei para que serve mas porque essas vars “exp_invertida” e “fasole”?
fasole é a abreviação de fator de soma por level, e exp_invertida e uma experiência que na verdade será subtraída e não somada.
Fasole vai servir pro seguinte, em cada LVL você ira precisar acumular um pouco a mais do que foi necessário para acumular no LVL anterior e para saber o tanto que você ira precisar temos essas var fasole ela que dita o tanto a mais que no caso é 10.
E exp_invertida é o tanto que ainda falta para passarmos de LVL. Então quando adicionamos exp em experiência_total temos que retirar de exp_invertido o mesmo tanto porque quando exp_invertido for menor ou igual a 0 será quando player passará de LVL. Então quem sabe que o player passou de LVL na verdade não é a experiencia_total, mas sim a exp_invertida. Experiencia_total só esta lá para sabermos o total que já foi acumulado.
Agora voltemos ao obj_inimigo e no evento create adicione a seguinte var na parte vars RPG:
E quando a experiência e dada ao player? Quando o inimigo morre! Então voltaremos à parte de collision player. E lá colocaremos o seguinte script na parte que identifica se o inimigo ainda tem vida.
Mas coloque antes de instance_destroy só para garantir que o script fará antes de destruir seu obj.
Quando digitamos += ou -= estamos fazendo algo muito interessante estamos adicionando o valor da var inimigo_exp diretamente com a var experiencia_total ou subtraindo de exp_invertida.
Agora volte ao obj_player e adicione um novo execute code no evento step e nele o seguinte script:
Legal mas quando ele sobe de LVL também tem de aumentar o ataque. Então coloque também:
Após isso já estamos aumentando o ataque quando sobe o LVL e também a cada LVL é preciso mais que o anterior para passar novamente. Testando agora você vera que dará certo, mas para ver isso acontecendo podemos usar um draw_text:
Vamos ao nosso player novamente e crie um evento draw e nele vamos adicionar o seguinte script:
view_xview e view_yview são vars que são muito úteis em escrever algo na tela que fique seguindo o player porque elas gordão o valor da posição de nossa tela no jogo e sua referencia esta no canto direto superior da tela e quando dizemos view_xview+5, view_yview+5 estamos falando o seguinte que eu quero meu texto na mesma posição que estiver a tela mais 5 pixels para baixo e 5 para direita é assim que é feito os menus que seguem o player no jogo.
Testando agora será possível reparar que quando damos o primeiro ataque o texto fica suado. Culpa da reconfiguração que fizemos em nosso obj_dano porque quando lá reconfiguramos o texto para o dano estamos reconfigurando o texto do jogo todo e precisamos agora configurar cada texto da maneira que queremos para não ficar feio então em nosso obj_player coloque antes do draw_text o seguinte script:
E agora testando o jogo estará tudo muito bom.
Talvez para makers mais experientes já sabão que esse script tem um defeito, mas que não dará para ser percebido se não for mudado algo no jogo então para demonstrar o defeito abra o create do obj_inimigo e nele mude a var inimigo_exp para 9.
Agora teste seu jogo e veja a relação exp total e exp next e veja que a um desfalque que o exp total não corresponderá com o exp next. Para ver isso analise as tabela a baixo
Veja também essa demo para ver o defeito.
Observando a tabela será visto que a segunda evolui mais rápido.
Observando da segunda para a terceira linha das tabelas você vera o defeito.
Na coluna exp next da segunda para a terceira na primeira tabela você vê que faltava, 1 de exp e depois passou para 20 e na segunda tabela passou de 1 para 12 isso porque quando você matou mais um inimigo a var exp_invertda ficou com o valor -8 mas esse -8 foi exp que você ganhou e quando você passa de 1 para 20 você o ignora, mas 20 – 8 é 12 ai você volta a adicionar esse exp novamente, então de 1 para 12 não esta sendo ignorado o -8.
Mas o que pode testar errado no script.
O erro esta exatamente nesta linha: exp_invertida = level * fasole;. Mais precisamente no sinal de = porque com ele falamos faça o novo valor e coloque na var. mas o certo seriamos dizer: faça o calculo e adicione a var somando ao numero dela. E como fazemos isso? Usando o sinal de +=
Nossa linha ficara assim então: exp_invertida += level * fasole;.
Aula10 demo.
Proto mais uma alua chaga ao seu fim e em nossa próxima aula falaremos sobre ataque e defesa e agilidade.
Primeiro vamos criar uma font. Clique com o segundo botão em cima da pasta Fonts e em cima de create font, agora configure a fonte da seguinte forma:
Selecione a fonte Times New Romen e marcando Bold você coloca o testo desta fonte em negrito.
Agora volte em nosso obj_dano e no evento draw adicione o seguinte script antes do draw_text_color:
- Código:
draw_set_font(font)
Com esse script você muda a fonte que seu jogo esta usando para aquela que você criou.
E para acabar vamos centralizar nosso texto. Por padrão ele começa centralizado no ponto direito superior de seu texto, mas para mudar isso é fácil e são dois comandos:
draw_set_halign()
draw_set_valign()
Esses são os códigos que conseguem modificar a centralização do texto de eu jogo, mas eles sozinhos não funcionam eles precisão de mais 5 contastes onde você fala onde você vai quer seu texto:
Como eu acho que deu para reparar draw_set_halign selecione a posição na horizontal e draw_set_valing seleciona a posição vertical. fa_right fa_left fa_top e fa_buttom são respectivamente a parte direita esquerda o topo e baixa do seu texto e fa_center e tanto o centro na vertical como na horizontal.
Agora depois de draw_set_text coloque o seguinte script:
- Código:
draw_set_halign(fa_center)
draw_set_valign(fa_center)
Centralizamos nosso texto tanto na vertical como na horizontal.
Agora podemos passar para lição sobre leveis.
Existem muitos jeitos de se fazer um esquema de LVL alguns jogos usam funções logarítmicas para fazer seus LVLs em outros usam banco de dados onde é armazenado o tanto de experiência necessária para se passar para o próximo LVL. Mas neste tutorial aprenderemos a montar um esquema simples que é usado em alguns bons jogos como Pokémon e também Castlevania.
É meio complicado de entender no começo, mas quando virem como é bem inteligente o script vocês verão como é simples.
Abrão o obj_criador_vars e no evento create adicione as seguintes vars após a que já tem lá:
- Código:
globalvar experiencia_total {experiencia_total = 0}
globalvar exp_invertida {exp_invertida = 10}
globalvar fasole {fasole = 10} //fator de soma por LVL
globalvar level {level = 1}
experiencia_total e level eu ate sei para que serve mas porque essas vars “exp_invertida” e “fasole”?
fasole é a abreviação de fator de soma por level, e exp_invertida e uma experiência que na verdade será subtraída e não somada.
Fasole vai servir pro seguinte, em cada LVL você ira precisar acumular um pouco a mais do que foi necessário para acumular no LVL anterior e para saber o tanto que você ira precisar temos essas var fasole ela que dita o tanto a mais que no caso é 10.
E exp_invertida é o tanto que ainda falta para passarmos de LVL. Então quando adicionamos exp em experiência_total temos que retirar de exp_invertido o mesmo tanto porque quando exp_invertido for menor ou igual a 0 será quando player passará de LVL. Então quem sabe que o player passou de LVL na verdade não é a experiencia_total, mas sim a exp_invertida. Experiencia_total só esta lá para sabermos o total que já foi acumulado.
Agora voltemos ao obj_inimigo e no evento create adicione a seguinte var na parte vars RPG:
- Código:
inimigo_exp = 1
E quando a experiência e dada ao player? Quando o inimigo morre! Então voltaremos à parte de collision player. E lá colocaremos o seguinte script na parte que identifica se o inimigo ainda tem vida.
- Código:
experiencia_total += inimigo_exp;
exp_invertida -= inimigo_exp;
Mas coloque antes de instance_destroy só para garantir que o script fará antes de destruir seu obj.
Quando digitamos += ou -= estamos fazendo algo muito interessante estamos adicionando o valor da var inimigo_exp diretamente com a var experiencia_total ou subtraindo de exp_invertida.
Agora volte ao obj_player e adicione um novo execute code no evento step e nele o seguinte script:
- Código:
if exp_invertida <= 0 { //se já acabou a diferença então:
level += 1; //aumentara meu LVL
exp_invertida = level * fasole; //e colocara uma nova diferença
}
Legal mas quando ele sobe de LVL também tem de aumentar o ataque. Então coloque também:
- Código:
if exp_invertida <= 0 { //se já acabou a diferença então:
level += 1; //aumentara meu LVL
exp_invertida = level * fasole; //e colocara uma nova diferença
atk += 2; //almenta meu ataque nem 2
}
Após isso já estamos aumentando o ataque quando sobe o LVL e também a cada LVL é preciso mais que o anterior para passar novamente. Testando agora você vera que dará certo, mas para ver isso acontecendo podemos usar um draw_text:
Vamos ao nosso player novamente e crie um evento draw e nele vamos adicionar o seguinte script:
draw_sprite(sprite_index,image_index,x,y)
draw_text(view_xview+5,view_yview+5,”LVL = ” + string(level)+” / next = ”+string(exp_invertida)+” / total = ”+string(experiencia_total))
view_xview e view_yview são vars que são muito úteis em escrever algo na tela que fique seguindo o player porque elas gordão o valor da posição de nossa tela no jogo e sua referencia esta no canto direto superior da tela e quando dizemos view_xview+5, view_yview+5 estamos falando o seguinte que eu quero meu texto na mesma posição que estiver a tela mais 5 pixels para baixo e 5 para direita é assim que é feito os menus que seguem o player no jogo.
Testando agora será possível reparar que quando damos o primeiro ataque o texto fica suado. Culpa da reconfiguração que fizemos em nosso obj_dano porque quando lá reconfiguramos o texto para o dano estamos reconfigurando o texto do jogo todo e precisamos agora configurar cada texto da maneira que queremos para não ficar feio então em nosso obj_player coloque antes do draw_text o seguinte script:
- Código:
draw_set_font(font)
draw_set_halign(fa_top)
draw_set_valign(fa_left)
E agora testando o jogo estará tudo muito bom.
Talvez para makers mais experientes já sabão que esse script tem um defeito, mas que não dará para ser percebido se não for mudado algo no jogo então para demonstrar o defeito abra o create do obj_inimigo e nele mude a var inimigo_exp para 9.
Agora teste seu jogo e veja a relação exp total e exp next e veja que a um desfalque que o exp total não corresponderá com o exp next. Para ver isso analise as tabela a baixo
Como esta | Como deveria ser | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
Observando a tabela será visto que a segunda evolui mais rápido.
Observando da segunda para a terceira linha das tabelas você vera o defeito.
Na coluna exp next da segunda para a terceira na primeira tabela você vê que faltava, 1 de exp e depois passou para 20 e na segunda tabela passou de 1 para 12 isso porque quando você matou mais um inimigo a var exp_invertda ficou com o valor -8 mas esse -8 foi exp que você ganhou e quando você passa de 1 para 20 você o ignora, mas 20 – 8 é 12 ai você volta a adicionar esse exp novamente, então de 1 para 12 não esta sendo ignorado o -8.
Mas o que pode testar errado no script.
O erro esta exatamente nesta linha: exp_invertida = level * fasole;. Mais precisamente no sinal de = porque com ele falamos faça o novo valor e coloque na var. mas o certo seriamos dizer: faça o calculo e adicione a var somando ao numero dela. E como fazemos isso? Usando o sinal de +=
Nossa linha ficara assim então: exp_invertida += level * fasole;.
Aula10 demo.
Proto mais uma alua chaga ao seu fim e em nossa próxima aula falaremos sobre ataque e defesa e agilidade.
tutorial feito por RedDragon
reddragon- Data de inscrição : 19/03/2008
Reputação : 0
Número de Mensagens : 267
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» Como fazer a imagem rotacionar para um certo lado se clicarmos num certo objeto?
» [Vídeo-Aula]Aula 4.1 - Usando funções básicas do draw
» Aula 3 - Puzzle - Todas os Modos da Aula 3 Aqui!
» [Vídeo-Aula] Aula 4 - Variáveis
» Game maker 8.1 E Gmstudio não estava abrindo no meu pc
» [Vídeo-Aula]Aula 4.1 - Usando funções básicas do draw
» Aula 3 - Puzzle - Todas os Modos da Aula 3 Aqui!
» [Vídeo-Aula] Aula 4 - Variáveis
» Game maker 8.1 E Gmstudio não estava abrindo no meu pc
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos