Aula 10 - Charles Darwin estava certo.

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Aula 10 - Charles Darwin estava certo.

Mensagem por reddragon em 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:



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
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

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum