Conectar-se
Quem está conectado
15 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 15 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte

Este é meu primeiro tutorial, como ele está?

16 - 76%
4 - 19%
1 - 5%
 
Total dos votos: 21
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1835
Insígnias de JAM :

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

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

[TUTORIAL] Aprendendo a trocar de sprites! - 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
avatar
Ranking : Nota C
Notas recebidas : C-D-A-C
Data de inscrição : 28/01/2011
Número de Mensagens : 1003
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 1
Ver perfil do usuáriohttp://sonicmaker.forumeiros.com/memberlist

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

em Seg 11 Abr 2011, 19:01
otimo tutorial wili vai ajudar bastante gente. Very Happy
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1835
Insígnias de JAM :

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

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: [TUTORIAL] Aprendendo a trocar de sprites! - 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
avatar
Ranking : Nota A
Notas recebidas : A
Data de inscrição : 25/02/2012
Número de Mensagens : 359
Insígnias de JAM :

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

Prêmios
   : 0
   : 1
   : 1
Ver perfil do usuário

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

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
avatar
Data de inscrição : 22/01/2012
Número de Mensagens : 30
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

em Seg 09 Dez 2013, 15:36
Obrigado cara, seu tutorial me ajudo muito Very Happy
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 10/07/2012
Número de Mensagens : 621
Insígnias de JAM :

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

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://www.craftstudios.com.br

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

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
avatar
Ranking : Sem avaliações
Data de inscrição : 14/04/2011
Número de Mensagens : 691
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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".
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1835
Insígnias de JAM :

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

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: [TUTORIAL] Aprendendo a trocar de sprites! - 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
avatar
Ranking : Sem avaliações
Data de inscrição : 14/04/2011
Número de Mensagens : 691
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

em Seg 09 Dez 2013, 17:39
Verdade, alguém reviveu o defunto! kkkk
=)
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

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!
avatar
Data de inscrição : 26/09/2014
Número de Mensagens : 4
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

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.
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

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
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 21/04/2014
Número de Mensagens : 192
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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


avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

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
}
}
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 21/04/2014
Número de Mensagens : 192
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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!
avatar
Data de inscrição : 27/09/2014
Número de Mensagens : 27
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Ver perfil do usuário

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

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!
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 21/04/2014
Número de Mensagens : 192
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum