Como recortar as imagens do jogo (máscaras)

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

Como recortar as imagens do jogo (máscaras)

Mensagem por GameMakerTutoriais em Seg 05 Ago 2013, 11:53



Máscara de sprites


Download link: http://the640kbworld.webng.com/game_maker_sprite_masks.zip

Vou passar uma dica de como criar uma forma diferente nos sprites (é como se estivéssemos usando máscaras). Já passei essa dica em posts, mas como o pessoal não manda um feedback se deu certo ou não, tenho a impressão de que nem entenderam.

Acho esse jeito melhor do que usar surfaces e é mais fácil, também. Tudo consiste em criar uma imagem preto-e-branco para servir como referência de alpha e usar a função sprite_set_alpha_from_sprite. O que estiver preto, ficará invisível e o que estiver branco, visível.

Você pode usar um sprite colorido como máscara, mas o Game Maker vai usar a luminosidade de qualquer forma. Essa função permite gradação de luminosidade, como deixei em um dos exemplos.

Sprite original:


Máscara:


Você poderia criar uma gama imensa de efeitos no seu jogo com isso, além de ser um recurso inteligente que ajuda a reduzir o tamanho do executável, pois em vez de criar outro sprite animado, só vai ser necessário criar outra máscara estática. Pra deixar mais legal ainda, você poderia até fazer uma animação via código, mexendo na escala ou na rotação do sprite.

Fiz um jogo de quebra-cabeças assim uma vez. Usei essa função pra recortar as peças e um blend pra criar um relevo. É legal porque você pode deixar o jogador personalizar a imagem, como uma foto de família, por exemplo.



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: Como recortar as imagens do jogo (máscaras)

Mensagem por Alex FC em Seg 05 Ago 2013, 15:53

Ótimo exemplo Brendan velho de guerra. Creio que será de muita utilidade para todos.

Fica a dica pra deixar mais comentários sobre os códigos para sabermos o que está sendo executado (Mesmo sendo exemplos que tu fez há um bom tempo atrás).

Obrigado por compartilhar. Happy

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: Como recortar as imagens do jogo (máscaras)

Mensagem por GameMakerTutoriais em Seg 05 Ago 2013, 18:28


É um dos meus maus hábitos que ainda não consegui largar... Agradeço pelo toque! Vou deixar os próximos códigos com mais comentários... Qualquer dúvida, também vou ficar feliz em ajudar respondendo no tópico.

Grande abraço kra!

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: Como recortar as imagens do jogo (máscaras)

Mensagem por CRP-Max em Seg 05 Ago 2013, 18:42

Muito interessante!!!
Com essa ideia eu poderia por exemplo, fazer uma lupa no jogo?
Ou talvez criar uma nova View com o formato que eu quisesse?
Se for possível vou finalmente colocar minha ideia em pratica. cheers

CRP-Max

Ranking : Nota C
Número de Mensagens : 819
Idade : 41
Data de inscrição : 28/10/2008
Notas recebidas : C
Reputação : 29
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Como recortar as imagens do jogo (máscaras)

Mensagem por GameMakerTutoriais em Seg 05 Ago 2013, 19:27



Com essa ideia eu poderia por exemplo, fazer uma lupa no jogo?

Cara, estou na dúvida. Acho que até daria, mas acabaria dando mais trabalho do que usar surfaces.

Essa função faria o recorte arredondado (lupa) no sprite, mas o inconveniente é que ela altera o alpha definitivamente. Então, precisaríamos fazer o recorte em uma cópia para não modificarmos a original (como eu fiz no exemplo).

Pra dar a ideia de uma lupa, teríamos que fazer a imagem ampliada (a cópia com máscara) se movimentar por cima da original, então acho que seria outro problema...

Nesse caso, o ideal seria usar surfaces, mesmo. Vou postar um exemplo comentado...

Ou talvez criar uma nova View com o formato que eu quisesse?

Nesse caso, também surfaces. A "view" principal do jogo, também é uma surface. A gente só precisaria mudar o "alvo" dos desenhos e recortar usando uma máscara ou alpha.

Uma vez eu vi uma dll para o Game Maker 5 (acho) que colocava a janela transparente. Mas por diachos eu não me lembro o nome! Eu acho que, usando essa dll com surfaces, daria para, literalmente, deixar a janela do jogo com qualquer formato (até nessas máscaras de exemplo que eu usei aí em cima).

Essa dll "pega" o conteúdo por detrás da janela do jogo e o põe como se fosse um background. Foi ÓTIMO ter comentado sobre isso, porque eu vou ver se encontro essa dll outra vez.

Se eu conseguir, vou postar, também. Grande abraço!

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: Como recortar as imagens do jogo (máscaras)

Mensagem por Alex FC em Seg 05 Ago 2013, 21:00

Como disse o Brendan, existe uma DLL que faz sua janela ter o formato que quiser. Se não me engano ela é pro GM7, vou ver se funciona bem no 8 ou Studio. Os links dela na GMC estão off.

Eu tenho ela em algum disco de Backup meu. Não estou no meu PC agora, mas quando chegar em casa mando ela pra você por MP. Blz?

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: Como recortar as imagens do jogo (máscaras)

Mensagem por PedroX em Seg 05 Ago 2013, 22:37

Para uma lupa quadrada/retangular, é possível fazer o efeito criando um backgrond a partir da tela, e então desenhá-lo assim:

Código:
draw_background_part_ext(background0, mouse_x-100, mouse_y-100, 200, 200, mouse_x-100*2, mouse_y-100*2, 2, 2, image_blend, image_alpha)

Fiz o teste com um background já criado e funcionou.

Mas acho melhor fazer com views, acabará sendo mais rápido.

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: Como recortar as imagens do jogo (máscaras)

Mensagem por Anderson3d em Ter 06 Ago 2013, 12:52

Muito bom ein brendan? Já testando em meus projetos...

Anderson3d

Ranking : Nota A
Número de Mensagens : 1479
Idade : 33
Data de inscrição : 15/02/2009
Notas recebidas : A - A
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

http://www.indiegamebr.com

Voltar ao Topo Ir em baixo

Re: Como recortar as imagens do jogo (máscaras)

Mensagem por GameMakerTutoriais em Ter 06 Ago 2013, 20:44


Alex, se você ainda tiver esse backup, poderia upar pra gente? Eu achava que era do 5, mas se é de um GM mais recente, melhor ainda! Cacei essa dll feito um doido e não achei. De antemão, já te agradeço por se dispor a ajudar!

@Pedro

Esse jeito é prático! Dá pra fazer uns efeitos bem loucos com essas funções "ext" e "part". Cool 

Fiquei martelando o Game Maker pra tentar um jeito de usar a textura da surface principal. Se isso fosse possível, nem seria necessário usar surfaces. Daria pra fazer uma forma primitiva com essa textura, não precisaríamos alterar os destinos dos desenhos "normais" das instâncias e, de quebra, ainda daria pra fazer um efeito "côncavo" na primitiva (pra dar a impressão de lente)!

Foi o que eu tentei, mas ainda não consegui. Não consigo enxergar uma forma de desenhar TUDO o que há no jogo, dentro da lupa, sem alterar o destino de desenho das instâncias ou forçar um screen_redraw dentro de outra surface (o que vai melar num evento draw rodando 2x).

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: Como recortar as imagens do jogo (máscaras)

Mensagem por PedroX em Ter 06 Ago 2013, 20:57

sprite_create_from_screen(...) / background_create_from_screen(...) não servem?

Outras alternativas seriam: screen_save('nome') e sprite_add('nome', ...) / background_add('nome', ...).

Sei que você é muito experiente no GM, mas é bom lembrar:

Código:
if (mouse_x - mouse_x_anterior + mouse_y - mouse_y_anterior <> 0)
{
// executar só quando o mouse se mover
}

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: Como recortar as imagens do jogo (máscaras)

Mensagem por Alex FC em Ter 06 Ago 2013, 23:23

Está aqui o link Brendan (Na verdade é GM6):

https://dl.dropboxusercontent.com/u/38428395/transparent.zip

Funciona bem com GM8, mas nada feito com o Studio.

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: Como recortar as imagens do jogo (máscaras)

Mensagem por GameMakerTutoriais em Ter 13 Ago 2013, 21:53




@Alex

Cara, MUITO obrigado por trazer pra gente isso! Já vou até aproveitar pra fazer mais um backup dela, também. Valeu!!

@Pedro

Eu pensei na possibilidade de tentar criar algo que fosse dinâmico, sem a necessidade de usar um sprite ou background. Até onde eu sei, tem jeito, mas *acho* que não dá pra postar isso num único script porque a alteração tem que ser feita no projeto inteiro e, principalmente, em todos os eventos Draw.

Uma view poderia servir como lente e acho que estou complicando à toa. Mas, SE desse pra fazer do jeito que eu queria, o efeito da lente ia ficar bem mais legal...

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: Como recortar as imagens do jogo (máscaras)

Mensagem por PedroX em Ter 13 Ago 2013, 22:09

Eis a solução:

Deixe apenas o objeto que precisar visível. O resto fica com visible=0.
Isso evitará rodar o Draw naquele Step.
Depois volte ao normal.

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: Como recortar as imagens do jogo (máscaras)

Mensagem por GameMakerTutoriais em Ter 13 Ago 2013, 22:24



É uma boa ideia! Eu vou tentar isso... Não sabia que o visible podia inibir a instância de executar o código no Draw. Conseguindo ou não, aprendi mais uma! Cool

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: Como recortar as imagens do jogo (máscaras)

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


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