GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Hoje à(s) 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39


Aula 10 - Charles Darwin estava certo.

Ir para baixo

Aula 10 - Charles Darwin estava certo. Empty Aula 10 - Charles Darwin estava certo.

Mensagem por reddragon Sex 13 Mar 2009, 14:52

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:

Aula 10 - Charles Darwin estava certo. Comfgfont


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:

Aula 10 - Charles Darwin estava certo. Comfghalignevaling


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
Inimigos mortos exp next exp total lvl
1 10 0 1
2 1 9 1
3 20 18 2
4 11 27 2
5 2 36 2
6 30 45 3
7 21 54 3
8 12 63 3
9 3 72 3
10 40 81 4
11 31 90 4
12 22 99 4
13 13 108 4
14 4 117 4
15 50 126 5
Inimigos mortos exp next exp total lvl
1 10 0 1
2 1 9 1
3 12 18 2
4 3 27 2
5 24 36 3
6 15 45 3
7 6 54 3
8 37 63 4
9 28 72 4
10 19 81 4
11 10 90 4
12 1 99 4
13 42 108 5
14 33 117 5
15 24 126 5
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.

tutorial feito por RedDragon
reddragon
reddragon

Data de inscrição : 19/03/2008
Reputação : 0
Número de Mensagens : 267
Prêmios : Aula 10 - Charles Darwin estava certo. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos