Conectar-se
Quem está conectado
24 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 23 Visitantes

CRP-Max

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 28/10/2014
Número de Mensagens : 29
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

[Resolvido]Como deixar a room preta e branca?

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)
avatar
Ranking : Sem avaliações
Data de inscrição : 11/10/2009
Número de Mensagens : 2184
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 106

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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/
avatar
Data de inscrição : 28/10/2014
Número de Mensagens : 29
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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
avatar
Data de inscrição : 19/08/2010
Número de Mensagens : 1299
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 47

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuário

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

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
avatar
Ranking : Sem avaliações
Data de inscrição : 11/10/2009
Número de Mensagens : 2184
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 106

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

em Qua 22 Abr 2015, 21:39
Reputação da mensagem: 100% (2 votos)
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
avatar
Data de inscrição : 28/10/2014
Número de Mensagens : 29
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

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

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
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum