Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[Resolvido]Como deixar a room preta e branca?
3 participantes
Página 1 de 1
[Resolvido]Como deixar a room preta e branca?
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.
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- Data de inscrição : 28/10/2014
Reputação : 1
Número de Mensagens : 29
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Como deixar a room preta e branca?
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...
... 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/
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/
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Como deixar a room preta e branca?
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
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- Data de inscrição : 28/10/2014
Reputação : 1
Número de Mensagens : 29
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Como deixar a room preta e branca?
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.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Como deixar a room preta e branca?
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:
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 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:
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
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 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
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Como deixar a room preta e branca?
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
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- Data de inscrição : 28/10/2014
Reputação : 1
Número de Mensagens : 29
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» [Ajuda] deixar room toda preta, apenas ao redor do meu personagem apareçendo.
» [Resolvido]como deixar o sol no centro da room?
» [[Resolvido]]Deixar zoom no jogo, mas não deixar na HUD
» Ajuda deixar room maior
» Deixar a room escura e personagem com luz
» [Resolvido]como deixar o sol no centro da room?
» [[Resolvido]]Deixar zoom no jogo, mas não deixar na HUD
» Ajuda deixar room maior
» Deixar a room escura e personagem com luz
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos