[TUTORIAL] Aprendendo a trocar de sprites! - Willy

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

Este é meu primeiro tutorial, como ele está?

76% 76% 
[ 16 ]
19% 19% 
[ 4 ]
5% 5% 
[ 1 ]
 
Total dos votos : 21

[TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Willy em Seg 11 Abr 2011, 17:57

Nome: Aprendendo a Trocar de Sprites
Descrição: Aprenda a fazer a troca de sprites do seu personagem sem precisar criar vários objetos.
Dificuldade: Iniciante
Requerimentos: GM6 ou superior lite.

Introdução:
Um erro muito comum dos programadores é a troca de sprites dos personagens. Muitas vezes é visto em engines o uso incorreto de troca de sprites, trocando não a imagem, mas sim, o objeto. Essa é uma forma incorreta de trocar de sprites, pois deixa o sistema mais complexo e pesado. A maneira mais confiável e pratica de se fazer é com o uso das tão conhecidas variáveis.
Neste tutorial, irei ensinar a vocês a forma correta de trocar os sprites, nesse exemplo, teremos os movimentos básicos: Parado, andando e pulando.

Não irei criar um sistema de movimento, pois não será necessário no tutorial. Para isso, pegue alguma engine que tenha apenas o movimento do jogador, como esta por exemplo.
Você pode usar esses sprites como exemplo para o tutorial. Mas lembre-se de centralizar o “x” dos sprites e colocar a mascara no objeto.

Precisaremos criar três variáveis, então, no create:
Código:
direita=true
andando=false
chao=true
“direita” vai servir para identificarmos a direção do jogador (false = esquerda).
“andando” vai checar se esta andando ou parado.
“chao” serve para identificar se esta no chão ou não.

Agora, no step, vamos dizer em qual “condição” o jogador está, ou seja, que movimento ele está realizando.

Spoiler:
Código:
//Checar se esta andando e se está para a direita
if keyboard_check(vk_right){//Se apertar para a dieita
direita=true //Está para a direita
andando=true //Está andando.
}else if keyboard_check(vk_left){//Se nao apertar para a direita, mas apertar para a esquerda
direita=false//Não está para a direita
andando=true //Está a andando
}else{//Se não estiver apertando nem para a direita e nem para a esquerda
andando=false// Não está andando
}
Para sabermos se esta no chão ou não, coloque isso:
Spoiler:
Código:
if place_free(x,y+1){//Se estiver livre abaixo, ele não esta no chão.
chao=false
}else{//Senão, está no chão
chao=true
}
Você poderia colocar isso no seu código de gravidade, mas nesse caso, tente assim.
Pronto! Já temos as condições necessárias para fazer a troca de sprites.

Agora, vamos fazer a mágica acontecer, vamos fazer o personagem trocar de sprites!
No end_step (ou outro tipo de step, mas prefiro no end_step):
Spoiler:
Código:
if direita=true{ //Se estiver para a direita
    if chao=true{//Se estiver no chão
        if andando=true{//Se estiver andando
        sprite_index=spr_anda_dir
        }else{//Se não estiver andando
        sprite_index=spr_parado_dir
        }
    }else{//Se estiver no ar
    sprite_index=spr_noar_dir
    }
}
O código acima, é feito para andar apenas para a DIREITA, sempre que for fazer seu código, faça apenas para a direita para não se confundir. Depois que a troca de sprites estiver funcionando PERFEITAMENTE, troque o ultimo “}” por “}else{“ e repita todo o código a partir de “If chao=true”, trocando apenas os nomes dos sprites. Se código deve ficar assim:
Spoiler:
Código:
if direita=true{ //Se estiver para a direita
    if chao=true{//Se estiver no chão
        if andando=true{//Se estiver andando
        sprite_index=spr_anda_dir
        }else{//Se não estiver andando
        sprite_index=spr_parado_dir
        }
    }else{//Se estiver no ar
    sprite_index=spr_noar_dir
    }
}else{//Esquerda
    if chao=true{//Se estiver no chão
        if andando=true{//Se estiver andando
        sprite_index=spr_anda_esq
        }else{{//Se não estiver andando
        sprite_index=spr_parado_esq
        }
    }else{{//Se estiver no ar
    sprite_index=spr_noar_esq
    }
}
PS: Não se esqueça de fechar o bloco com um “}”.

Pronto! Já está feito o seu sistema de troca de sprites. Esse é um sistema simples, mas você pode fazer um sistema bem mais complexo, como esse:
Spoiler:
Código:
if direita=true{
        if chao=true{
            if abaixado=false{
                if atacando=false{
                    if andando=true{
                    sprite_index=spr_anda_dir
                    }else{
                    sprite_index=spr_parado_dir
                    }
                }else{
                sprite_index=spr_ataque_dir
                }
            }else{
            sprite_index=spr_abaixa_dir
            }
        }else{
        sprite_index=spr_pula_dir
        }
}else{//Esquerda. É a mesma coisa acima (depois de direita=true), mas aqui as sprites são da esquerda
        if chao=true{
            if abaixado=false{
                if atacando=false{
                    if andando=true{
                    sprite_index=spr_anda_esq
                    }else{
                    sprite_index=spr_parado_esq
                    }
                }else{
                sprite_index=spr_ataque_esq
                }
            }else{
            sprite_index=spr_abaixa_esq
            }
        }else{
        sprite_index=spr_pula_esq
        }
}

Finalizo aqui este "pequeno grande" tutorial, você pode fazer sistemas da forma que quiser usando essa técnica. Dessa forma, seu game fica mais leve e controlável, sem a necessidade de criar milhares objetos para fazê-lo trocar de sprite (na verdade, não troca sprite, mas sim o objeto).

Espero que tenham gostado e entendido. Qualquer duvida, fiquem a vontade para perguntar.

Façam bom proveito!
blz

___________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por sonic luan em Seg 11 Abr 2011, 19:01

otimo tutorial wili vai ajudar bastante gente. Very Happy

sonic luan

Ranking : Nota C
Número de Mensagens : 1003
Idade : 17
Data de inscrição : 28/01/2011
Notas recebidas : C-D-A-C
Reputação : 18
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://sonicmaker.forumeiros.com/memberlist

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Willy em Ter 12 Abr 2011, 14:18

Obrigado por comentar Sonic Luan!
Este é o primeiro tutorial que faço aqui no forum. Fiz porque um amigo estava com problemas pra fazer a troca dos sprites. Então, tive a ideia de criar o tutorial.

bravo Esperava mais comentarios...
Obrigado!
blz

___________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por GabrielXavier em Qua 09 Maio 2012, 01:41

Cara parece ser bom axo que esse tuto vai suprir minha nessessidade willy.
muito obrigado por me indicar esse tuto.
Parbens pelo tuto willy.
amanha eu testo Happy

GabrielXavier

Ranking : Nota A
Número de Mensagens : 359
Data de inscrição : 25/02/2012
Notas recebidas : A
Reputação : 15
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 1

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Dallysson em Seg 09 Dez 2013, 15:36

Obrigado cara, seu tutorial me ajudo muito Very Happy

Dallysson

Número de Mensagens : 30
Idade : 19
Data de inscrição : 22/01/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por AlexBosquin em Seg 09 Dez 2013, 16:24

talvez esse foi um erro (ou melhor burrice) minha nunca pensei sequer uma vez em usar endstep que julgo ser uma checagem de quando o obj estiver parando, muito bom willy s2

AlexBosquin

Ranking : Nota C
Número de Mensagens : 621
Idade : 20
Data de inscrição : 10/07/2012
Notas recebidas : C
Reputação : 35
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://www.craftstudios.com.br

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por fredcobain em Seg 09 Dez 2013, 17:26

Willy, certamente um tutorial vindo de vc só poderia ser algo útil.
Parabéns.

Apenas uma ressalva:
O comando "SWITCH" é mais elegante (e mais eficiente) quando vc tem uma série de "IF's".

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Willy em Seg 09 Dez 2013, 17:33

Hey, obrigado pelos comentários, fico feliz em saber que ajudei.

AlexBosquin, os "steps" devem ser usados de acordo com a necessidade, mas, geralmente, usamos apenas o step normal. Pesquise um pouco e veja as diferenças!

fredcobain, esse meu tutorial é 2011... Tanto a indentação quanto a forma de programar evoluíram bastante nesse meio tempo. Eu uso switch muitas vezes, mas não acho que seria muito viável usá-lo neste caso, mas agradeço a dica. blz

___________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por fredcobain em Seg 09 Dez 2013, 17:39

Verdade, alguém reviveu o defunto! kkkk
=)

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Duca em Sab 27 Set 2014, 18:56

Olá, desculpa reviver esse tópico, mas poderia me ajudar em uma questão?
eu estive usando esse exemplo, mas eu tenho encontrado uma dificuldade, e confesso não encontrar a resposta, talvez por uma grande falta de conhecimento no GM, mas o meu problema é que quando eu adiciono o sprite, ele não anima ele fica estático, poderia me dizer o que devo mudar para ele animar por favor?

Obrigado

Ah seu tutorial é muito bom!

Duca

Número de Mensagens : 27
Data de inscrição : 27/09/2014
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Wendryos Black Horn em Sab 27 Set 2014, 19:25

Boa noite Duca!

Acho que sei o problema, no código de adicionar a sprite coloque + isso:
Código:
image_speed=0.5

Se não for isso, me diga como que ta o seu código.

Wendryos Black Horn

Número de Mensagens : 4
Data de inscrição : 26/09/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Duca em Dom 28 Set 2014, 10:48

Bom dia Black Horn,

eu tinha adicionado o código, mas ele não anima o sprite,
eu imagino ter um tutorial explicando isso melhor, mas eu te confesso que eu não encontro os scripts certos, apenas por D&D e não vejo vantagens nisso, segue meus códigos
and_step:
Código:
if direita=true{ //Se estiver para a direita
    if chao=true{//Se estiver no chão
        if andando=true{//Se estiver andando
        sprite_index=spr_frente;
        image_speed=0.5;
        }else{//Se não estiver andando
        sprite_index=spr_player1;
       
        }
    }else{//Se estiver no ar
    sprite_index=spr_player1
    }
}else{//Esquerda
    if chao=true{//Se estiver no chão
        if andando=true{//Se estiver andando
        sprite_index=spr_tras;
        image_speed=0.5;
        }else{//Se não estiver andando
        sprite_index=spr_player0
        }
    }else{//Se estiver no ar
    sprite_index=spr_player0
    }
}

Esse é o que eu peguei aki mesmo e modifiquei algumas coisas.

Depois peguei um outro que serve para movimentação:
step:
Código:
//Get the player's input
key_right = keyboard_check(vk_right); 
key_left = -keyboard_check(vk_left);
key_jump = keyboard_check_pressed(vk_space);
//key_jump = keyboard_check(vk_space);

//React to inputs
move = key_left + key_right;
hsp = move * movespeed;
if (vsp < 10) vsp += grav;

if (place_meeting(x,y+1,obj_wall))
{
    vsp = key_jump * -jumpspeed
}

//Horizontal Collision
if (place_meeting(x+hsp,y,obj_wall))
{
    while(!place_meeting(x+sign(hsp),y,obj_wall))
    {
        x += sign(hsp);
    }
    hsp = 0;
}
x += hsp;

//Vertical Collision
if (place_meeting(x,y+vsp,obj_wall))
{
    while(!place_meeting(x,y+sign(vsp),obj_wall))
    {
        y += sign(vsp);
    }
    vsp = 0;
}
y += vsp;

e o Evento create:

Código:
///Initialize Variables
grav = 0.2;
hsp = 0;
vsp = 0;
jumpspeed = 5;
movespeed = 3;
//sprite
direita = true
andando = false
chao = true
// sprite set
image_speed=0.5

Duca

Número de Mensagens : 27
Data de inscrição : 27/09/2014
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Wendryos em Dom 28 Set 2014, 14:08

Pow cara não imagino esse código dando certo, cara invés desse código coloque esse no caso de ser plataforma:
No create:
Código:
global.direcao=0

E no step:

Gravidade e pulo
Código:
if place_free(x,y + 1){
gravity = 0.5
}else{
gravity = 0

Salto

Código:
if keyboard_check_pressed(vk_up){
if not place_free(x,y+1){
vspeed=-8
}
}
if keyboard_check_released(vk_up) and vspeed <= 0{
vspeed/=2
}
}
Movimentação direita e esquerda:

Esquerda:
Código:
if keyboard_check(vk_left)
{global.direcao =180
sprite_index = player_left
if place_free(x-4,y){x -=4}
}
if keyboard_check (vk_down) or keyboard_check (vk_up) or keyboard_check (vk_right) or keyboard_check (vk_left) = true
{
image_speed=0.5
}
else
{
image_speed =0
image_index =0
}
Direita:
Código:
if keyboard_check(vk_right)
{global.direcao=0
sprite_index = player_right
if place_free(x+4,y){x +=4}
if keyboard_check (vk_down) or keyboard_check (vk_up) or keyboard_check (vk_left) or keyboard_check (vk_right) = true
{
image_speed=0.5
}
else
{
image_speed =0
sprite_index =0
}
}


Se não der certo, continue a responder que eu tento a responder da melhor forma possivel.

na colisão com o chão coloque isso " codigo do Willy" :
Código:
if vspeed > 0 and not place_free(x,y + vspeed){
move_contact_solid(direction,vspeed)
}
vspeed = 0



Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Duca em Dom 28 Set 2014, 17:46

Muito obrigado por estar me ajudando.

Está perfeito o sprite!

fiquei com algumas dúvidas.

Por favor, poderias me explicar o:

Pq checa o vk_down, vk_up e o vk_left?

outra coisa e, por favor, me desculpa a falta de conhecimento, eu coloquei uma opção de velocidade para ele poder "andar" mas não consegui fazer ele parar, ele fica andando infinito. segue o código:

Código:
//GRAVIDADE
if place_free(x,y + 1){
gravity = 0.5
}else{
gravity = 0

//colisão com chão

if vspeed > 0 and not place_free(x,y + vspeed){
move_contact_solid(direction,vspeed)
}
vspeed = 0


//PULO
if keyboard_check_pressed(vk_space){
if not place_free(x,y+1){
vspeed=-8
}
}
if keyboard_check_released(vk_space) and vspeed <= 0{
vspeed/=2
}
}
//ANDAR TRAS
if keyboard_check(vk_left)
{global.direcao =180
sprite_index = spr_tras
if place_free(x-4,y){x -=4}
hspeed=-5
if keyboard_check_released(vk_left)
hspeed=0
}
if keyboard_check (vk_down) or keyboard_check (vk_up) or keyboard_check (vk_right) or keyboard_check (vk_left) = true
{
image_speed=0.3
}
else
{
image_speed =0
image_index =0
}
//ANDAR FRENTE
if keyboard_check(vk_right)
{global.direcao=0
sprite_index = spr_frente
if place_free(x+4,y){x +=4}
hspeed=5
if keyboard_check_released(vk_right)
hspeed=0
if keyboard_check (vk_down) or keyboard_check (vk_up) or keyboard_check (vk_left) or keyboard_check (vk_right) = true
{
image_speed=0.3
}
else
{
image_speed =0
sprite_index =0
}
}

Duca

Número de Mensagens : 27
Data de inscrição : 27/09/2014
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Wendryos em Dom 28 Set 2014, 20:49

Check é tipo: ele checa se o teclado e a letra ou função do teclado for pressionado ele realiza tal ação.

Bom 2 coisas que vi no seu código que pode estar te prejudicando:
A colisão com com o chão é outro evento e você não vai colocar no step e sim no ato de colisão.

E outra coisa retire esse lance de hspeed, coloque o código igual te enviei só arrume as sprites com forme estar o nome da sua.


Qual quer duvida já sabe!

Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Duca em Dom 28 Set 2014, 21:37

Muito obrigado!
Vc me ajudou em muito mais do que imagina, aprendi muitas coisas além desses comandos.


vlw!

Duca

Número de Mensagens : 27
Data de inscrição : 27/09/2014
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Wendryos em Seg 29 Set 2014, 14:44

De nada, se precisar pode contar comigo oque eu saber eu ensino


Aqui na GMBR tem muitos tutoriais da uma olhada lá:
gmbr.forumeiros.com/f36-tutoriais

Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Aprendendo a trocar de sprites! - Willy

Mensagem por Conteúdo patrocinado Hoje à(s) 12:05


Conteúdo patrocinado


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