Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

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

Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por GustavoLC em Sex 10 Fev 2012, 02:07

Pessoal , procurei no fórum e não achei nenhum tópico que correspondesse à minha necessidade.

Há alguma forma de eu mudar as cores de uma sprite dentro do jogo? Além disso, há como mudar uma determinada cor em específico?


Pergunto isso pq estou fazendo um fan-game do megaman x e, para quem já jogou, sabe que quando ele troca de arma, as cores de sua armadura tb mudam e gostaria de fazer esse efeito. No entanto, fazer um pacote de sprites de todos os movimentos, englobando um conjunto de cores, seria, acredito eu, impraticável.


Alguém sabe se isso é possível?

GustavoLC

Número de Mensagens : 39
Data de inscrição : 20/11/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por saim em Sex 10 Fev 2012, 08:38

GustavoLC escreveu:No entanto, fazer um pacote de sprites de todos os movimentos, englobando um conjunto de cores, seria, acredito eu, impraticável.
É nada.
Conhece a função draw_sprite_color? Nem vou perder tempo explicando pra que ela serve.
"Peraí, só partes da armadura dele devem mudam de cor, não dá pra pintar o megaman TODO".
Verdade. Mas quem disse que você vai usar um sprite só pra cada imagem?

Conheço duas formas de fazer isso. Ambas requerem que você separe cada imagem do megaman em duas sprites - a parte que está sempre da mesma cor e a parte colorida.
A primeira, mais fácil de entender e talvez menos eficiente, é usar dois draw_sprite, sendo que o segundo é draw_sprite_color. Quando as imagens se sobreporem, o jogador nem vai saber que tem duas meias-imagens ali.
A segunda é criar uma surface e, a partir dessa surface, criar um pacote de imagens DURANTE o jogo (pode ser durante o carregamento do jogo). Você desenha a sprite sem cores, desenha a colorida, exporta como sprite, limpa a surface. Desenha a srpite sem cores, desenha a colorida (com outra cor), exporta de novo. Repita até passar por todas as cores e você terá todas as sprites em todas as cores. Se você manjar de arrays, fica fácil chamar a sprite certa na hora certa.

Outra vantagem desses métodos é que não precisa mudar só as cores, você pode usar sprites diferentes pra dar um visual diferenciado (um cotovelo mais pontudo, um capacete com chifres, etc.).

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por GustavoLC em Sex 10 Fev 2012, 09:09

Valei, Saim, mas acho que esses recursos citados por vc só funcionam na versão Pro, não é mesmo? Estou usando a versão Lite, por enquanto. De qualquer form
a, obrigado pela resposta.

GustavoLC

Número de Mensagens : 39
Data de inscrição : 20/11/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por saim em Sex 10 Fev 2012, 09:42

É, infelizmente, essas funções só funcionam na versão pro (e eu me confundi, não existe draw_sprite_color, a função seria draw_sprite_ext, sendo que um dos argumentos é a cor).

Acho que, nesse caso, não resta muita alternativa senão ter todos os sprites. Nem pintar o megaman inteiro funciona na lite.

Mas o editor de imagens do game maker tem uma ferramenta de substituição de tons que pode ser útil. Você escolhe um tom (azul, por exemplo) e todo o azul da imagem será substituído por outro tom de sua escolha (como vermelho). Isso pode ser usado pra criar rapidamente sprites parecidas, mas de outras cores.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por MatheusReis em Sex 10 Fev 2012, 09:55

Movido de 'Formação de Equipes' para 'Perguntas & Respostas'. Mais atenção ao postar.

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por GustavoLC em Sex 10 Fev 2012, 10:29

Obrigado, Saim. O editor de imagens do Game aker realmente é bem eficiente, mas administrar novas sprites não seria interessante por conta do alto número. Ainda não comprei a versão PRO até dominar mais a versão Lite, mas isso acontecerá em breve.

Matheus Reis, desculpe pelo post, na verdade, nem sei como ele foi parar em "Formação de Equipes", rsrs. Um Abraço.

GustavoLC

Número de Mensagens : 39
Data de inscrição : 20/11/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por Mannoroth em Sex 10 Fev 2012, 11:35

será q dá pra mudar a hue da sprite durante o jogo? sei q o color_get_hue(color) informa uma determinada cor, mas nao sei como alterar ela. se for possivel isso tbm pode ser possivel mudar as cores.

Mannoroth

Ranking : Nota D
Número de Mensagens : 836
Idade : 26
Data de inscrição : 05/10/2010
Notas recebidas : D+D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por saim em Sex 10 Fev 2012, 13:16

Acho que o Pedrø andou lendo esse tópico. Olha a engine que ele postou.

(ainda não baixei a engine, então não sei se dá pra rodar em lite)

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por Mannoroth em Sex 10 Fev 2012, 13:42

engine do pedro>> a imagem tem que estar em bmp, nos teste q eu fiz com megamanx a qualidade cai muuito ao converter pra bmp. E a imagem convertida nao abre, sempre da erro. Eu nunca terminei meu projeto de megamanx tbm, conseguir poderia ser util pra mim tbm. Tentei alterar a engine pra abrir outros formatos, e nao consegui tbm. Se alguem conseguir usar essa engine corretamente avisae.

Mannoroth

Ranking : Nota D
Número de Mensagens : 836
Idade : 26
Data de inscrição : 05/10/2010
Notas recebidas : D+D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por PedroX em Sex 10 Fev 2012, 17:03

Eai, hoje eu postei um exemplo de como mudar alguma cor de uma imagem externa. Mas é claro que você pode exportar sua sprite e depois trocar a cor.

http://gmbr.forumeiros.com/t20925-engine-mudar-certa-cor-de-uma-imagem

Você poderia usar sprite_save().

Não tem como abrir a imagem convertida, a menos que você exporte o sprite.
Não entendo o motivo da qualidade cair, já que bmp é um dos formatos que guarda muita informação.

Não sei se será possivel abrir outros formatos, principalmente os com compressão.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por GameMakerTutoriais em Ter 14 Fev 2012, 21:18

GustavoLC escreveu:Há alguma forma de eu mudar as cores de uma sprite dentro do jogo? Além disso, há como mudar uma determinada cor em específico?

Pergunto isso pq estou fazendo um fan-game do megaman x e, para quem já jogou, sabe que quando ele troca de arma, as cores de sua armadura tb mudam e gostaria de fazer esse efeito. No entanto, fazer um pacote de sprites de todos os movimentos, englobando um conjunto de cores, seria, acredito eu, impraticável.

O Kabeção fez uma dll excelente pra fazer isso, ela muda as cores do sprite em tempo de execução do jogo, dá uma olhada:

Tópico: http://gmbr.forumeiros.com/t19142-dll-gmtint

Outro esquema muito bom é alternar entre palentas de cores de GIF, o que é muito simples no Photoshop. Não dá trabalho quase nenhum porque você só vai abrir a paleta pra editar as cores e salvar com a extensão ACT. Eu fiz um exemplo:

Aqui: http://bit.ly/mxXNEE

Falou!


Última edição por Ninja8086 em Qua 15 Fev 2012, 09:57, editado 1 vez(es)

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por vinians em Ter 14 Fev 2012, 22:09

Amigo isso é bem simples de fazer. Veja como:
1) Crie o sprite base do Megaman X sem a armadura.

2) Crie um outro sprite e desenhe as partes da armadura que você que que mude de cor da cor branca.

No Evento Create:
Código:

cor_da_armadura = c_red; //qualquer cor aqui
No Evento Draw:
Código:

draw_self(); //desenha o sprite principal sem a armadura
draw_sprite_ext(x, y, sprArmadura, 0, image_xscale, image_yscale, image_angle, cor_da_armadura, image_alpha);
Pronto, agora basta você trabalhar um pouco no código e adaptar para o seu jogo.
Explicação:
Desenhando a sprite da armadura na cor branca todos os Bits da cor estarão setados com 1's assim a cor sera exatamente a cor especificada no parâmetro.
Obs. O comando draw_sprite_ext() existe na versão lite. Usei a versão 8.1 do GM.
Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

Mensagem por Mannoroth em Qua 15 Fev 2012, 00:10

é, o que o vinians falou deu certo testei aqui cheers . Eu tbm to acompanhando isso pq me interessa, ainda vou precisar. No gm8.0 é assim:
Código:
draw_sprite_ext(sprArmadura, 0, x,y,image_xscale, image_yscale, image_angle, c_green, 1)
no lugar de c_green bota a cor q quer, q pode ser uma variavel como o vinians postou. A variavel seria definida pelo status de cor de armadura q o megaman ta usando entao.
só que o draw_self nao existe no 8.0, acho q equivale a isso:
Código:
draw_sprite(sprite_index,image_index,x,y)

Lembrando que sera necessario umas 3 draw_sprite_ext, cada uma cuidando de uma sprite q sera parte da armadura, afinal qd o megaman muda de armadura, são pelo menos 3 mudanças de cor (a armadura nao é homogeneamente de uma cor só). E tem q botar os sprites em branco parado, pulando, caindo, correndo, dando dash, atirando, levando pancada1, levando pancada2 e outros dependendo de como vai ser o jogo e q habilidades vai ter o megaman. Bom, no megaman sao tantas tonalidades de cores, q nao sei se aquelas 19 q tem nas funçoes do game maker (c_aqua, c_black,c_blue, etc) vão bastar pro jogo.

Mannoroth

Ranking : Nota D
Número de Mensagens : 836
Idade : 26
Data de inscrição : 05/10/2010
Notas recebidas : D+D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida: Mudando uma determinada cor da sprite dentro do jogo!

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


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