GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


[Resolvido] Pintar parte da sprite

+2
Gonzo
Super Maker
6 participantes

Ir para baixo

[Resolvido] Pintar parte da sprite Empty [Resolvido] Pintar parte da sprite

Mensagem por Super Maker Dom 01 Jul 2012, 20:18

Olá!
Bem, dessa vez eu vou tentar explicar sem postar imagens e nem vídeos (to meio sem tempo agora).
Quero saber como fazer pra pintar uma parte específica de uma sprite. Sem usar dll ou extenções.
Vou dar um exemplo dizendo sobre a bandeira atrás do logo Game Maker.
Como fazer pra mudar a cor amarela sem passar pro outro lado?
No outro lado também tem a cor amarela, mas ta separada.
Tem como pegar o valor hexadecimal dessa cor e converter pra outro?

Minha dúvida é essa, quem poder me ajudar com esse detalhe eu agradeço.
Até logo!


Última edição por Super Maker em Seg 02 Jul 2012, 19:43, editado 1 vez(es)
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Gonzo Dom 01 Jul 2012, 20:40

ola Super Maker olha eu tentei com a ferramenta substituir cor do photoshop mais parece q a imagem de fundo recebeu um filtro ou uma iluminação bem proximo ao amarelo então acho q da pra fazer só através de montagem separando as partes

* com a ferramenta substituir cor do photoshop
[Resolvido] Pintar parte da sprite 444r


obs : vc tambem pode selecionar o obj com a ferramenta laço e ai usar a ferramenta substituir cor.


avatar
Gonzo

Data de inscrição : 29/05/2012
Reputação : 33
Número de Mensagens : 929
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Super Maker Dom 01 Jul 2012, 22:44

Pô mina valeu a tentativa, mas é em GML que eu quero fazer isso.
Vou mostrar uma imagem mais simples...
[Resolvido] Pintar parte da sprite 01
Quero pegar o valor FFFFFF do centro e transformar em qualquer outro. Como se eu estivesse jogando um baude de tinta no Paint.
Só preciso saber como pegar esse valor.
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Gonzo Dom 01 Jul 2012, 23:14

bom.. creio que essa engine pode te ajudar

http://sandbox.yoyogames.com/games/184570-tutorial---letting-the-player-customize-colors
avatar
Gonzo

Data de inscrição : 29/05/2012
Reputação : 33
Número de Mensagens : 929
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Gonçalves Dom 01 Jul 2012, 23:28

Cara, eu já vi um cara explicando como faz isso (Até num tópico na GMC sobre pistas de corrida). Juro que vou tentar achar pra você... Razz
Gonçalves
Gonçalves

Games Ranking : Nota B

Notas recebidas : B + A + C
Data de inscrição : 29/10/2010
Reputação : 79
Número de Mensagens : 1013
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 2 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Super Maker Seg 02 Jul 2012, 00:26

Bem, pegar a cor eu já tentei aqui e consegui. https://dl.dropbox.com/u/70151484/drawonsprite.gmk
Agora vou tentar mudar na sprite.

Mina, achei legal essas engines, mas isso eu sei fazer. Meu problema é mudar parte da sprite e não ela toda como nas engines.
Obrigado!

Gonçalves escreveu:Cara, eu já vi um cara explicando como faz isso (Até num tópico na GMC sobre pistas de corrida). Juro que vou tentar achar pra você... Razz
Valeu man, eu aguardo...
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Kabeção Seg 02 Jul 2012, 11:02

Não há nem um meio rápido de se fazer isso sem DLL.
Inclusive eu até já fiz uma DLL para trocar a cor dos pixeis direto das texturas do DirectX na memória.
O processo era bem rápido mas o método só funcionava com o GM8.0 sendo que já tinha o 8.1 então não compensava continuar.

O único jeito para seu caso é redesenhar toda a sprite em uma surface ou dividir a imagem em partes e assim usar o image_blend para mudar a cor.
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

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

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por saim Seg 02 Jul 2012, 13:34

Kabeção escreveu:O único jeito para seu caso é redesenhar toda a sprite em uma surface ou dividir a imagem em partes e assim usar o image_blend para mudar a cor.
Ou, se você não precisar de velocidade, percorrer a área, pixel por pixel, mudando o valor de hue dos pixels que tiverem um hue parecido com o original. Eu ainda vou descobrir um jeito de isolar uma específica usando blend modes. Se conseguíssemos isso, já era meio caminho andado.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por GameMakerTutoriais Seg 02 Jul 2012, 13:44

[Resolvido] Pintar parte da sprite 01

O jeito aí nesse caso é usar um flood fill. Há um tempo atrás eu peguei um engine muito bom naquele antigo "64digits" (não lembro se era esse o nome), mas agora não estou em casa, quando chegar eu dou um edit e posto ele aqui pra você (a menos que você consiga achá-lo lá, se é que ainda existe esse site).

Daria pra unir esse engine com essa ideia do saim de pegar o hue. O sistema do engine pega a cor do pixel, então, com pouca modificação a gente consegue isso. Pra ressalvar o que o Kabeção falou: não é rápido porque não usa dll. Ele usa dsmaps, é bem lento, mas funciona.

------- Edit -------

Outra ideia: isolar todas as cores com blend mode, exceto o branco (nesse caso especificamente)

Falou!
avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por saim Seg 02 Jul 2012, 14:15

saim escreveu:Eu ainda vou descobrir um jeito de isolar uma específica usando blend modes. Se conseguíssemos isso, já era meio caminho andado.
Ninja8086 escreveu:Outra ideia: isolar todas as cores com blend mode, exceto o branco (nesse caso especificamente)
Se você souber como isolar QUALQUER cor com blend modes, eu gostaria de conhecer a teoria por trás dela.
Hm... talvez se... usássemos algo como bm_inv_dest_color... numa superfície totalmente pintada na cor que queremos isolar... não, as cores intermediárias também seriam afetadas. Mesmo que funcionasse, tentar isolar o vermelho transformaria o roxo em azul.
Continuo curioso, Ninja! Como você faria isso?
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Super Maker Seg 02 Jul 2012, 18:43

Os caras da pesada cheers
Valeu por estarem me ajudando!
Era isso que eu tava pensando pessoal. Um tipo de dsmap.
Percorrer a área que tem uma determinada cor e mudar esse valor pro que foi pego antes com o draw_getpixel(mouse_x,mouse_y), ou quem sabe criar e dividir em tempo real as várias surfaces pra cada cor, usando um loop.
Quem sabe fazer um dsmap assim? Ou elaborar um loop desses?
Eu vou tentando aqui enquanto isso.
Até logo!
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por GameMakerTutoriais Seg 02 Jul 2012, 18:55


saim escreveu:Se você souber como isolar QUALQUER cor com blend modes, eu gostaria de conhecer a teoria por trás dela.
Hm... talvez se... usássemos algo como bm_inv_dest_color... numa superfície totalmente pintada na cor que queremos isolar... não, as cores intermediárias também seriam afetadas. Mesmo que funcionasse, tentar isolar o vermelho transformaria o roxo em azul.
Continuo curioso, Ninja! Como você faria isso?

Então... Nesse caso, a gente não mexeria na cor e sim nos canais de cor. Quando a gente quer isolar uma cor determinada, a gente usa a cor contrária. Isso é muito comum em correção de imagens, por exemplo. É por isso que existem (também) o sistema CMYK, que é o contrário do RGBA.

A gente corrige vermelho com ciano (c), verde com magenta (m) e azul com amarelo (y). O que a gente vai fazer então? Isolar cada canal da imagen na surface, e a partir dos canais, trabalhar com eles de acordo com quanto de r, g ou b determinada cor usa. Lógico, vai afetar toda a imagen, afinal rgb é um composto.

Pra isolar cada canal, eu não tenho certeza absoluta, vou falar de cabeça, mas deve ser isso aqui... Digamos que cê tenha uma imagem onde a gente queira isolar o azul...

1 - Pinta a imagem na surface
2 - Pinta uma surface secundária toda de azul
3 - Usa o blend bm_dest_color e bm_zero (esse eu sei de cabeça porque é o mesmo usado pelo image_blend);
4 - Pinta a secundária por cima da primeira duas vezes com:
A - O contrário de verde: ~c_lime ou $ff00ff
B - O contrário de vermemo: ~c_red ou $ffff00

Daí você isola o azul. Pronto, agora é só escurecer ou clarear o canal. Isolar os outros e mesclar os canais rgb novamente. =)


Super Maker escreveu:
Os caras da pesada cheers
Valeu por estarem me ajudando!
Era isso que eu tava pensando pessoal. Um tipo de dsmap.
Percorrer a área que tem uma determinada cor e mudar esse valor pro que foi pego antes com o draw_getpixel(mouse_x,mouse_y), ou quem sabe criar e dividir em tempo real as várias surfaces pra cada cor, usando um loop.
Quem sabe fazer um dsmap assim? Ou elaborar um loop desses?
Eu vou tentando aqui enquanto isso.
Até logo!


Tá na mão, bróder. Acabei de fazer upload. Esse exemplo é legal demais, tu vai aprender a lot sobre ds_maps. A mudança que eu comentei é simples, vou deixar sem alteração pra que o pessoal possa baixar se interessarem, mas se precisar, a gente altera pra ti.

http://dl.dropbox.com/u/77818756/Game%20Maker/gm6%20-%20Floodfill.gm6

Falou!
avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Super Maker Seg 02 Jul 2012, 19:14

Isso é ótimo Ninja8086!
Da pra ver tudo sendo pintado, o dsmap trabalhando.
Se caso eu ordenar pra velocidade da room almentar pra não ficar vísível esse processo, vai consumir muita memória?
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por GameMakerTutoriais Seg 02 Jul 2012, 19:23


É bem lento mesmo, nesse caso, aumentar o speed do jogo não vai ajudar muito... Infelizmente. E eu não manjo nada da GMAPI, porque senão daria pra pegar esse sistema e mandar pra uma dll (eu acho! não manjo nada dela). =(

avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Super Maker Seg 02 Jul 2012, 19:42

Pô cara já é de bom tamanho oque você fez.
Pode deixar que seus créditos estão garantidos.
Muito obrigado mesmo a você e todos que ajudaram.
Resolvido!
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por GameMakerTutoriais Seg 02 Jul 2012, 20:18

Super Maker, vai lá na linha 79 do script que está no step, e troque isso:

Código:
if (doing_floodfill) {

por isso

Código:
while (doing_floodfill) {

Daí ele vai dar uma "travadinha" mas pelo menos não vai mostrar o processo de fill. Já vai mostrar a imagem pintada (não precisa alterar o room_speed).

Pô cara já é de bom tamanho oque você fez.
Pode deixar que seus créditos estão garantidos.

Não fui eu que fiz! Não tem os créditos do autor no engine, também não sei quem fez. Nesse caso, já que vai colocar, coloque para o 64digits, que pelo menos assim, valoriza um pouco o site que prestou o serviço.

Falou!
avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Super Maker Seg 02 Jul 2012, 20:24

Valeu pela dica Ninja8086.
Mais uma vez muito obrigado!
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Resolvido] Pintar parte da sprite Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

[Resolvido] Pintar parte da sprite Empty Re: [Resolvido] Pintar parte da sprite

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos