Mudar apenas parte da sprite

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

Mudar apenas parte da sprite

Mensagem por LincolnSalles em Sab 17 Nov 2012, 19:38

Em muitos jogos percebo que é animada apenas parte da sprite. Isso economiza desenho, pois você desenha apenas partes da sprite, e não ela toda. Eu posso animar o rosto do personagem sem ter que desenhar o corpo junto. Eu tenho um exemplo abaixo do jogo Caves Story:



Nesse outro exemplo do Mário apenas a roda é animada, não precisando desenhar o tanque todo:



É possível fazer isso em gml?

LincolnSalles

Número de Mensagens : 40
Idade : 34
Data de inscrição : 20/09/2012
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

Mensagem por SIGILOSO em Sab 17 Nov 2012, 19:59

Com certeza, tanto por códigos no evento Draw, quanto com diferentes instâncias reunidas para montar um único objeto.

Os olhos desse monstro se comportam individualmente, piscando, sem a necessidade de animar toda a sprite.

E aqui, as "peças" de sprites, que quando unidas formam todo um personagem mais dinâmico, detalhado e completo.

Eu faço isso a partir de instâncias, assim o personagem pode ter características atribuídas exclusivamente a determinada parte do seu corpo e uma animação própria e mais natural Smile
afro

SIGILOSO

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

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

Mensagem por LincolnSalles em Sab 17 Nov 2012, 20:17

Sim, com instâncias eu sei fazer para o objeto parado. Mas eu quero mudar parte da animação do personagem com o mesmo em ação, em movimento. Digamos que eu tenha um personagem com o cabelo em pé, mas quando o mesmo correr quero o cabelo indo para trás. Terei uma animação só para o cabelo. Com o Draw faz isso né? Como?

LincolnSalles

Número de Mensagens : 40
Idade : 34
Data de inscrição : 20/09/2012
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

Mensagem por SIGILOSO em Sab 17 Nov 2012, 20:32

draw_sprite_ext()
Este código desenha uma sprite no objeto. Sempre que o objeto possuir um código
no evento DRAW, a sprite dele não é desenhada na tela. Com este código ele pode desenhar não só a sprite dele, como outras.
Nos campos x e y do código, você simplesmente digita... x e y, respectivamente. Significa que a sprite será desenhada na exata posição da instância. Se repetir o código, desenhando uma sprite diferente, bastaria colocar uma posição diferente para o eixo y, caso fosse o cabelo por exemplo. Um "y-6" já alteraria a posição.
Só que aí você teria que trabalhar com variáveis separadas para cada parte do personagem, para que os códigos no Draw sejam executados de maneiras distintas.
afro

SIGILOSO

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

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

Mensagem por LincolnSalles em Dom 18 Nov 2012, 17:32

Não ficou claro, não consegui.
Bem vou tentar ser mais claro com o que eu to querendo fazer:




Fiz as sprites acima como teste pra entender esse processo, pra depois fazer a sprite do personagem que eu realmente quero. No step está assim:
if keyboard_check(vk_right) if place_free(x+4,y){x+=4 sprite_index=scaxumba image_xscale=1}
if keyboard_check(vk_left) if place_free(x-4,y) {x-=4 sprite_index=scaxumba image_xscale=-1 }
if keyboard_check_pressed(vk_up) and vspeed=0 {vspeed=-7 }
if keyboard_check(vk_nokey) {image_index=0}
Agora como eu uso o draw_sprite_ext ou outra função no evento draw pra desenhar a sprite da cabeça acima por cima da cabeça da sprite animada somente quando o personagem pular (quando if keyboard_check_pressed(vk_up) and vspeed=0)?

LincolnSalles

Número de Mensagens : 40
Idade : 34
Data de inscrição : 20/09/2012
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

Mensagem por Rodrigo Santiago em Dom 18 Nov 2012, 19:50

Lembre-se de que as variáveis xscale e yscale afetam apenas a imagem quando não existe evento draw declarado ou você não á usa dentro de uma função de desenho como draw_sprite_ext.

Você tem que colocar duas ou mais funções de desenho no evento draw, dependendo de quantas partes você divide a imagem. Por exemplo, coloque duas sprites uma para o corpo e outra para cabeça.
Dai você coloca este código no evento draw:
draw_sprite_ext(sprite_do_corpo,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha)
draw_sprite_ext(sprite_da_cabeça,image_index,x,y,image_xscale2,image_yscale,image_angle,image_blend,image_alpha)

A image xscale2 é a variável que você cria pra ser a xscale da segunda imagem , que fará ela se invertir, você pode colocar quaisquer valores dentro dos outros campos mais estes são os pra que a imagem anime de acordo com a image_speed e tenha a cor determinada no blend e o número da sub imagem, você pode mudar levemente a coordenada da segunda sprite(ex: x+5,y+6) pra que ela se encaixe.
Obs.: Este código só serve pra sprites com mesmo número de sub imagens ou que não tem animação.Se quiser duas animações com números diferentes é só me perguntar.

Rodrigo Santiago

Ranking : Nota B
Número de Mensagens : 1281
Idade : 20
Data de inscrição : 28/07/2012
Notas recebidas : C + C + B
Reputação : 73
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 1
   : 3

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

Mensagem por LincolnSalles em Dom 18 Nov 2012, 20:29

Quero saber sim com 2 animações de quadros diferentes.

Valeu pela resposta.
Eu consegui assim, mesmo com a cabeça tendo só um quadro e o corpo 12. Quando o personagem sai do chão muda a cabeça, como eu queria.
if keyboard_check(vk_right) {draw_sprite(scaxumba,-1,x,y)}
if keyboard_check(vk_left) {draw_sprite_ext(scaxumba,-1,x,y,-1,1,0,c_white,1)}
if keyboard_check(vk_nokey) {draw_sprite(scaxumba,0,x,y)}
if keyboard_check(vk_up) {draw_sprite(scaxumba,-1,x,y)}
if place_free(x,y+1) {draw_sprite(scabeca,-1,x-4,y-15)}
Eu comecei agora e estava trabalhando com o sprite_index no step, mas como quero mesclar mais de uma ao mesmo tempo, não preciso mais usar no step o image_index né? Agora tenho que desenhar as sprites no evento draw. Consegui espelhar a imagem pra esquerda quando ando pra esquerda, mas quando solto o botão (vk_nokey) não consigo fazer o personagem parar para o lado que estava na ultima vez, ele volta para direita pq a sprite está voltada pra direita.
No sprite_index eu conseguia, no draw_sprite ainda não sei.

LincolnSalles

Número de Mensagens : 40
Idade : 34
Data de inscrição : 20/09/2012
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

Mensagem por Kapoty em Dom 18 Nov 2012, 20:55

Crie uma variável chamada "dir" de direita e coloque o valor dela como 1.

Quando pressionar a tecla que movimenta para a esquerda, coloque o valor dela de -1.

Quando pressionar a tecla que movimenta para a direita, coloque o valor dela de 1.

Ao desenhar a sprite parada, use :

Código:
draw_sprite_ext(scaxumba,0,x,y,dir,1,0,c_white,1)

Espero que tenha entendido.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

Mensagem por Rodrigo Santiago em Dom 18 Nov 2012, 21:20

Não use o nokey, ele é muito perigoso! Dá bug facilmente. Use key released pra left e right!

Rodrigo Santiago

Ranking : Nota B
Número de Mensagens : 1281
Idade : 20
Data de inscrição : 28/07/2012
Notas recebidas : C + C + B
Reputação : 73
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 1
   : 3

Voltar ao Topo Ir em baixo

Re: Mudar apenas parte da sprite

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


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