Página 1 de 1

Como mudar o "brilho" do jogo em certas partes?

Enviado: Qui Jan 12, 2017 4:35 pm
por Crisper
E aí pessoal?

Ultimamente tenho trabalhando num joguinho de plataforma bem simples, mais voltado ao estudo do Game Maker e até agora eu não tido nenhum dificuldade em criar alguma coisa para o jogo, ATÉ AGORA. Estava pensando em criar algumas fases noturnas, mas para fazer isso, eu queria que todos os sprites e tiles da fase ficassem com um pouco mais escuros, sem que haja a necessidade de refazê-los, um por um, com um brilho menor.

Então a minha dúvida é a seguinte: Tem como criar algum "objeto", de preferência, que ao ser colocado numa room, modifica o brilho da mesma?

OBS: Eu sei que no Game Maker Studio existe a opção de criar Shaders, mas eu não consegui compreender muito bem seu funcionamento, então, se alguém quiser me ajudar utilizando-se desta função, fique a vontade, mas vai ter que explicar "bem explicadinho" :V

Re: Como mudar o "brilho" do jogo em certas partes?

Enviado: Qui Jan 12, 2017 5:26 pm
por saim
Eu refaria os sprites, mas não um por um. Mandaria o game maker fazer isso por mim.
Não sei usar shaders (nem o que são). Quando alguém explicar bem explicadinho, vou querer dar uma olhada.

Eu colocaria as sprites em scripts que usassem surfaces e blend modes, retornando uma cópia modificada da sprite.

Uma forma rápida de se pensar no assunto seria colar cada sprite numa surface, cobrir a surface com um retângulo preto, semi-transparente, depois recortar a sprite. Isso é um pouco mais complicado do que foi descrito (a parte de recortar a sprite, principalmente), mas possível. Tem muito tempo que fiz isso, mas acho que ainda consigo.

Outra forma de se pensar a respeito seria reduzir a saturação das imagens. Isso provavelmente é mais complicado, eu realmente não sei pra que lado correr, tentando alcançar esse objetivo, mas certamente é possivel.


Se curtiu alguma das idéias, posso tentar desenvolver os tais scripts (se é que eles já não existem).

Re: Como mudar o "brilho" do jogo em certas partes?

Enviado: Qui Jan 12, 2017 5:48 pm
por Crisper
@saim
Pelo visto o meu objetivo é mais difícil do que eu pensei XD
Acho que pra esse jogo vou apenas fazer alguns tiles azulados e um background noturno, pronto, tá aí uma fase noturna :V

Mesmo assim, obrigado pelas dicas, Sain, com certeza vou aproveitá-las num projeto futuro :)

Re: Como mudar o "brilho" do jogo em certas partes?

Enviado: Sex Jan 13, 2017 10:08 am
por yshizaki
Não entendi direito, mas se não estou enganado, você pode fazer um sprite totalmente preto, do tamanho da sua view, e no objeto que utiliza esse sprite, mandar ele seguir o x e o y da room, assim:
Step:

Código: Selecionar todos

x= view_xview[0];
y= view_yview[0];
E para fazer ele controlar o horário você meche com o image_alpha dele, assim:
Step:

Código: Selecionar todos

if (room=fase0) then image_alpha=0;
if (room=fase1) then image_alpha=0.3;
if (room=fase2) then image_alpha=0.7;
onde você trocaria os "fase1" "fase2" etc pelo nome de suas rooms, e o valor do image_alpha pela quantidade de brilho que você quer, quando mais próximo de zero mais claro, quanto mais próximo de 1, mais escuro, não sei se é o que você quer, mas eu faria assim :P

Re: Como mudar o "brilho" do jogo em certas partes?

Enviado: Sex Jan 13, 2017 10:49 am
por chicoweb
Então a minha dúvida é a seguinte: Tem como criar algum "objeto", de preferência, que ao ser colocado numa room, modifica o brilho da mesma?
Cria um objeto com sprite retangulo todo preto que pegue a room toda, chame de obj_escuridao;
Coloque ele no eixo 0,0 da room, e no evento draw, vc tira a opacidade até ficar como vc quer assim:

obj_escuridao: Evento DRAW

Código: Selecionar todos

x = room_x
y = room_y
image_alpha = 0.85 // Quanto maior mais claro, vai de 0.0 a 1.00
draw_self()
Mais uma idéia a se vc quiser iluminar uma parte da ela por exemplo ao redor do player, deixe um buraco no centro sprite com fundo transparente.
Mas nesse caso você vai ter que fazer uma rotina para o obj_escuridão seguir o player de modo que o buraco fique posicionado ao redor do player, substituindo o room_x e room_y;
Para um efeito melhor ainda voce pode colocar um degrade nesse buraco indo do preto para o transparente.

Ah e uma ultima dica, se você quer iluminar somente alguns objetos da room, modifique os depths deles de modo que quem fica na frente do obj_escuridão nao sofre o efeito;

Re: Como mudar o "brilho" do jogo em certas partes?

Enviado: Dom Jan 15, 2017 10:32 pm
por Superbomber
Bem a maneira mais prática seria usar draw.

Já fiz um game (mal feito e incompleto) a uns anos atrás, que tinha uma transição de dia e noite para representar que um dia passou.

Eu simplesmente desenhei um rectângulo que ocupasse toda a tela e alterei o alpha para escurecer e depois clarear. (Quão mais alpha, mais escuro)

Um exemplo:

Código: Selecionar todos

draw_set_alpha(0.8);
draw_set_color(c_black);
draw_rectangle(view_xview, view_yview, view_xview + view_wview, view_yview + view_hview, false);
Bye. :flw:

Re: Como mudar o "brilho" do jogo em certas partes?

Enviado: Ter Jan 17, 2017 11:49 am
por saim
A idéia de uma tela preta semitransparente pode resolver muita coisa, mas tem dois problemas. São só opiniões, mas acho que vale a pena colocar, aqui.

O primeiro é a cor. Acho que ficaria melhor uma tela de cor variável (usando "make_colour_rgb"), sendo que a hora mais escura seria de um azul escuro, não um preto, realmente. Não é muito realista, mas dá uma enriquecida nos gráficos. Aí, dependendo do tipo de noite, você vai dando uma variada. Se você quiser um clima mais místico, aplicar um pouco de vermelho (pra dar um roxo) pode ajudar. Um clima de agito, de festa, pode usar um pouco de verde (pra aproximar do amarelo), por aí vai. Sempre mais azul que as outras cores, mas sempre bem pouco de cada uma, pra ficar escuro.
E, já que chegou até aqui, porque não manter essa película sobre o jogo inteiro, usando uns laranjas pra tarde e uns amarelos pro amanhecer? Umas equações simples pra definir, em função do horário, o quanto usar de cada cor e voilà!

Agora um problema DE VERDADE com essa idéia são os objetos que você pode querer destacar. Os efeitos especiais. O truque pra um objeto chamar atenção é usar cores bem saturadas. Um baú do tesouro tem sempre uma cor que destoa do resto da fase. Um power-up tem até efeitos de partículas bem brilhantes. Isso tem que permanecer independente do tipo de fase, e colocar uma película por cima de tudo vai cobrir esses objetos, também. Se você tem poucas sobreposições no jogo, dá pra administrar o depth e resolver isso, mas tem situações em que a coisa complica (você pode querer o baú do tesouro por cima da película, mas parcialmente coberto pelo arbusto, que está por BAIXO da película, por exemplo). A solução tem mesmo que passar por um GDD bem elaborado. Em função das características do jogo, você pode adotar uma solução simples ou precisar de uma engine mais complexa.

Mas o que eu curti MESMO foi essa primeira idéia, a dos shaders. Vou ler a respeito deles com mais atenção e, se tiver alguma idéia mirabolante, coloco aqui.