[Resolvido]Como deixar a room preta e branca?

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

[Resolvido]Como deixar a room preta e branca?

Mensagem por BugueiXD em Seg 13 Abr 2015, 18:03

Eae pessoal , faz um tempo que parei de mexer no gm e comecei com a unity, mas agora estou com um projeto 2d e resolvi voltar pra essa engine que eu tanto amo.

Estou com uma dúvida, por exemplo pra fazer minha room e todos os seus objetos, (menos o objeto do player)ficarem em preto e branco ao apertar ctrl.

Ex: essa é minha room



Quando eu apertar ctrl ela fica assim:



Mas ao soltar a tecla a room voltasse ao normal

Sei que não ficou tão bom assim por que só tinha um objeto colorido, mas acho que deu pra entender.


Última edição por BugueiXD em Ter 28 Abr 2015, 19:03, editado 1 vez(es)

BugueiXD

Número de Mensagens : 29
Data de inscrição : 28/10/2014
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: [Resolvido]Como deixar a room preta e branca?

Mensagem por Markituh em Qua 15 Abr 2015, 03:23

De uma forma bem simples, você poderia fazer uma sprite colorida e outra monocromática para cada objeto. Daí, com uma variável global.pretobranco, você controlaria a "preto-e-branquisse" setando ela para true ou false. Em cada objeto você faria uma verificação pra checar o estado dessa variável e trocar a sprite de acordo.

Recomendo que você utilize variáveis nesse caso para controlar a mudança de sprites, daí fica mais fácil pra fazer isso...
Código:
if (andando and pulando) {
    if (global.pretobranco == true) {
        sprite_index = spr_andandopulando_pretobranco
    } else {
        sprite_index = spr_andandopulando
    }
}

... depois de toda a lógica de movimento e definição dessas variáveis tiver sido feita, aí você continua com as outras sprites. Espero que dê tudo certo. Abraços o/

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como deixar a room preta e branca?

Mensagem por BugueiXD em Qua 15 Abr 2015, 06:32

Quanto as Sprites eu já tinha arrumado um jeito, era parecido com o seu, mas acho que a sua lógica seria mais rápida

O meu problema é com o cenário agora, como fazer ele ficar preto e Branco também?Como se eu saturasse (Acho que assim que se esreve) a tela toda menos o meu player

BugueiXD

Número de Mensagens : 29
Data de inscrição : 28/10/2014
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: [Resolvido]Como deixar a room preta e branca?

Mensagem por Zero. em Qua 15 Abr 2015, 07:27

Eu acredito que tenha uma forma de fazr isso usando surface e blend modes, eu n conheço muito sobre, irei dar uma pesquisada e deixo algo aqui

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como deixar a room preta e branca?

Mensagem por Markituh em Qua 22 Abr 2015, 21:39

Espero que não tenha desistido ainda (ou será que já encontrou a resposta?). Estive dando uma pesquisada sobre isso e a única forma direta que encontrei foi o uso de shaders, um recurso do GM: Studio (mas que pode ser adicionado às versões anteriores por meio de DLLs). Não tem como fazer usando blend_modes, infelizmente - pelo menos, não no GMS por conta de terem removido a screen_redraw, mas ainda sim seria uma gambiarrazinha - vou te mostrar como fazer isso com shaders!

Os shaders funcionam assim: eles alteram a composição da tela usando usa linguagem de shading como a GLSL (padrão) ou HLSL. A diferença nas duas vai mais de sintaxe mesmo, mas o princípio é igual. Usarei GLSL aqui. Os shaders não são simples alterações de cores ou efeitos, eles podem alterar até a estrutura da imagem com um conhecimento mais avançado. Crie um shader e nomei-o sh_bw (bw - black and white, ou o nome que você quiser). Nele, vai aparecer como se fosse uma janela do editor de Scripts, mas a diferença é que agora tem duas abas: Vertex, e Fragment, que são os dois tipos de manipulação oferecidas - vertex, como o nome sugere, manipula a estrutura, e fragment, a cor.

Como só vamos alterar a cor aqui, usaremos apenas o Fragment. Os códigos que já vem nas duas abas são simplesmente passthroughs, ou seja, eles não fazem nenhuma alteração, só entregam o mesmo valor que receberam. Deixe o vertex como está, apague o que tem em fragment e ponha o seguinte:
Código:
//
// Shader preto e branco
// Peguei da GMC
//
varying vec2 v_vTexcoord;
varying vec4 v_vColour;

void main()
{
    vec4 Color = texture2D( gm_BaseTexture, v_vTexcoord )*v_vColour; // Cor de base
    vec3 Lum = vec3(0.299,0.587,0.114); // Fatores de luminosidade
    float res = dot(Color.xyz, Lum);  // dot - produto das matrizes
    gl_FragColor = vec4( res,res,res, Color.w ); // Cor resultante
}

O codigo é bem simples, e digo isso porque é mesmo. "xyz" poderia ser também "rgb", as duas formas tem o mesmo efeito: retornar os 3 primeiros componentes do vetor. Eu estava tentando ver como fazer para controlar o quanto do preto e branco iria ser aplicado já que você pretendia fazer uma animação, certo? O problema é que isso é mais uma questão matemática, aí complica um pouco Razz Se eu descobrir essa manha, ponho aqui.

Agora vamos desenhar essa joça: no Step do seu objeto control (ou até no player), ponha o seguinte:
Código:
if (global.preto_e_branco) and shader_is_compiled(sh_bw) {
   // Se estiver ativado e o shader estiver disponivel
   shader_set(sh_bw);
} else { shader_reset(); }

Você poderia usar a sequência de shader_set e _reset em qualquer parte do Draw, é o mesmo princípio da surface_set_target e surface_reset_target, só aquela porção de código será afetada. Mas como queremos que afete tudo que é desenhado, fazemos dessa forma. No evento da tecla que você quer, é só alternar essa variável entre true e false. Tcharam! Que delícia de efeito cara! Mas, se não ficou preto e branco, é uma pena :/ Talvez algo errado que tenha feito, ou sua placa de vídeo não suporta shaders corretamente (drivers desatualizados?).

Enfim, eu fiz um exemplozinho aqui (em GMZ): [download]. A alternação está no Step do player, e o obj_tela é o controle do efeito.

Abraços blz

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como deixar a room preta e branca?

Mensagem por BugueiXD em Dom 26 Abr 2015, 19:40

Cara, simplesmente fantástico, você me ajudou e muito. Créditos Garantidos

No meu jogo o personagem volta no tempo, e para o efeito eu vou usar sua explicação, quem sabe ate coloco ele no CM

BugueiXD

Número de Mensagens : 29
Data de inscrição : 28/10/2014
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: [Resolvido]Como deixar a room preta e branca?

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


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