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
Iluminacao
5 participantes
Página 1 de 1
Iluminacao
Galera, eu queria saber como faco uma iluminacao legal no meu jogo...
Tipo assim... É um jogo de terror e ficaria legal se fosse uma iluminacao meio escurecia em volta do personagem, deixando mais claro apenas a area onde ele se encontra e as bordas escuras... Vcs entenderam mais ou menos?
Tipo assim... É um jogo de terror e ficaria legal se fosse uma iluminacao meio escurecia em volta do personagem, deixando mais claro apenas a area onde ele se encontra e as bordas escuras... Vcs entenderam mais ou menos?
Rubens T [Stormy Games]- Data de inscrição : 15/04/2009
Reputação : 1
Número de Mensagens : 85
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Iluminacao
Pra fazer isso, você pode usar a função draw_set_blend_mode(), mas pra usá-la você precisa ter o GM registrado.
Crie um sprite de uma bola com degradê de preto para cinza claro de dentro para fora - crie um novo sprite, deixe ele do tamanho que você quer que seja a bola, centralize a origem apertando o botão "center" na janela do sprite, na edição da imagem vá no menu Image > Gradient Fill (ou shift+ctrl+G), na janela que aparecer deixe a primeira cor como cinza claro (na janela de escolha de cores aperte "Definir cores personalizadas" e anote os valores de vermelho, verde e azul, serão importantes depois) e a segunda como preto, e selecione o 6º quadradinho (na direita de baixo) e aperte OK).
Agora, no evento draw do personagem, coloque:
Agora, a explicação:
A função draw_set_blend_mode() mexe com o rgb (red, green, blue/vermelho, verde, azul) da imagem. Existem quatro argumentos que você pode usar:
bm_normal: deixa normal - não muda nada, você tem que colocar isso depois do draw em que usou o blend para voltar ao normal e não afetar os outros draws.
bm_add: o rgb da imagem com esse blend é somado ao da imagens que estiverem atrás dela - se a imagem de trás tiver (128, 0, 192), e a com blend (128, 64, 255), o resultado será (255, 64, 255) (o máximo é 255);
bm_subtract: o rgb da imagem é subtraído ao das imagens que estiverem atrás - se a imagem atrás tiver (128, 64, 128) e a com o blend (64, 64, 64), o resultado será (64, 0, 64) (o mínimo é 0);
bm_max: escolhe os valores mais altos - se a imagem atrás tiver (255, 64, 128) e a com blend (128, 128, 255), o resultado será (255, 128, 255).
Para fazer o que você quer, temos que usar o bm_subtract. Sendo que no centro a bola é preta (0, 0, 0), não subtrairá nada, deixando normal. Já em volta, que é cinza claro (quase (255, 255, 255)), vai diminuir tudo para quase 0, deixando tudo escuro.
Nos valores de x e y, eu colquei (x+sprite_width/2, y+sprite_height/2). Vai funcionar se a origem do sprite do personagem for (0, 0). Desse jeito, vai desenhar o sprite bola (que tem a origem no centro) exatamente no personagem (posição dele mais metade do tamanho).
Agora, a última parte, para desenhar retângulos em volta e escurecer todo o resto:
draw_set_color(make_color_rgb(vermelho, verde, azul)); // Lembra daqueles valores que eu disse para você anotar lá no início pois seriam importantes? Coloque-os aqui.
// A cor usada pelo draw será a mesma das bordas da bola
// Daqui pra baixo, desenha os retângulos, o "false" no final de todos eles significa que serão preenchidos (false para "outline", que faria o retângulo ter só as bordas, vazio por dentro)
draw_rectangle(0, 0, room_width, y+sprite_height/2-(altura da bola/2), false);
// Desenha um retângulo da esquerda à direita da room, de cima da room até a parte de cima do sprite da bola (meio do personagem menos metade da altura do sprite da bola)
draw_rectangle(0, y+sprite_height/2+(altura da bola/2), room_width, room_height, false);
// Desenha um retângulo da esquerda à direita da room, da parte de baixo do sprite da bola até a parte de baixo da room
//Agora só falta a esquerda e direita da bola, em cima e em baixo já está preenchido
draw_rectangle(0, y+sprite_height/2-(altura da bola/2), x+sprite_width/2-(largura da bola/2), /*y+sprite_height/2+(altura da bola/2)*/room_height, false);
// Desenha um retângulo da esquerda da room até a esquerda do sprite da bola, da parte de cima do sprite da bola até a parte de baixo dele
draw_rectangle(x+sprite_width/2+(largura da bola/2), y+sprite_height/2-(altura da bola/2), room_width, y+sprite_height/2+(altura da bola/2), false);
// Desenha um retângulo da direita do sprite da bola até a direita da room, da parte de cima do sprite da bola até a parte de baixo dele
draw_set_blend_mode(bm_normal);
// Coloquei isso porque, como disse antes, sempre precisa voltar ao normal depois para não afetar outras coisas.
Acabei de editar, agora testei e deu certo (em volta não fica tudo preto, só escurecido)
Se alguma coisa não der certo me avisem.
Crie um sprite de uma bola com degradê de preto para cinza claro de dentro para fora - crie um novo sprite, deixe ele do tamanho que você quer que seja a bola, centralize a origem apertando o botão "center" na janela do sprite, na edição da imagem vá no menu Image > Gradient Fill (ou shift+ctrl+G), na janela que aparecer deixe a primeira cor como cinza claro (na janela de escolha de cores aperte "Definir cores personalizadas" e anote os valores de vermelho, verde e azul, serão importantes depois) e a segunda como preto, e selecione o 6º quadradinho (na direita de baixo) e aperte OK).
Agora, no evento draw do personagem, coloque:
- Código:
draw_sprite(sprite_index, image_index, x, y); // Desenha o sprite do personagem (uma vez que há eventos no draw, o sprite do objeto não aparece)
draw_set_blend_mode(bm_subtract); // Depois explico essa parte
draw_sprite(sprite da bola, 0, x+sprite_width/2, y+sprite_height/2);
draw_set_color(make_color_rgb(vermelho, verde, azul));
draw_rectangle(0, 0, room_width, y+sprite_height/2-(altura da bola/2), false);
draw_rectangle(0, y+sprite_height/2+(altura da bola/2), room_width, room_height, false);
draw_rectangle(0, y+sprite_height/2-(altura da bola/2), x+sprite_width/2-(largura da bola/2), /*y+sprite_height/2+(altura da bola/2)*/room_height, false);
draw_rectangle(x+sprite_width/2+(largura da bola/2), y+sprite_height/2-(altura da bola/2), room_width, y+sprite_height/2+(altura da bola/2), false);
draw_set_blend_mode(bm_normal);
Agora, a explicação:
A função draw_set_blend_mode() mexe com o rgb (red, green, blue/vermelho, verde, azul) da imagem. Existem quatro argumentos que você pode usar:
bm_normal: deixa normal - não muda nada, você tem que colocar isso depois do draw em que usou o blend para voltar ao normal e não afetar os outros draws.
bm_add: o rgb da imagem com esse blend é somado ao da imagens que estiverem atrás dela - se a imagem de trás tiver (128, 0, 192), e a com blend (128, 64, 255), o resultado será (255, 64, 255) (o máximo é 255);
bm_subtract: o rgb da imagem é subtraído ao das imagens que estiverem atrás - se a imagem atrás tiver (128, 64, 128) e a com o blend (64, 64, 64), o resultado será (64, 0, 64) (o mínimo é 0);
bm_max: escolhe os valores mais altos - se a imagem atrás tiver (255, 64, 128) e a com blend (128, 128, 255), o resultado será (255, 128, 255).
Para fazer o que você quer, temos que usar o bm_subtract. Sendo que no centro a bola é preta (0, 0, 0), não subtrairá nada, deixando normal. Já em volta, que é cinza claro (quase (255, 255, 255)), vai diminuir tudo para quase 0, deixando tudo escuro.
Nos valores de x e y, eu colquei (x+sprite_width/2, y+sprite_height/2). Vai funcionar se a origem do sprite do personagem for (0, 0). Desse jeito, vai desenhar o sprite bola (que tem a origem no centro) exatamente no personagem (posição dele mais metade do tamanho).
Agora, a última parte, para desenhar retângulos em volta e escurecer todo o resto:
draw_set_color(make_color_rgb(vermelho, verde, azul)); // Lembra daqueles valores que eu disse para você anotar lá no início pois seriam importantes? Coloque-os aqui.
// A cor usada pelo draw será a mesma das bordas da bola
// Daqui pra baixo, desenha os retângulos, o "false" no final de todos eles significa que serão preenchidos (false para "outline", que faria o retângulo ter só as bordas, vazio por dentro)
draw_rectangle(0, 0, room_width, y+sprite_height/2-(altura da bola/2), false);
// Desenha um retângulo da esquerda à direita da room, de cima da room até a parte de cima do sprite da bola (meio do personagem menos metade da altura do sprite da bola)
draw_rectangle(0, y+sprite_height/2+(altura da bola/2), room_width, room_height, false);
// Desenha um retângulo da esquerda à direita da room, da parte de baixo do sprite da bola até a parte de baixo da room
//Agora só falta a esquerda e direita da bola, em cima e em baixo já está preenchido
draw_rectangle(0, y+sprite_height/2-(altura da bola/2), x+sprite_width/2-(largura da bola/2), /*y+sprite_height/2+(altura da bola/2)*/room_height, false);
// Desenha um retângulo da esquerda da room até a esquerda do sprite da bola, da parte de cima do sprite da bola até a parte de baixo dele
draw_rectangle(x+sprite_width/2+(largura da bola/2), y+sprite_height/2-(altura da bola/2), room_width, y+sprite_height/2+(altura da bola/2), false);
// Desenha um retângulo da direita do sprite da bola até a direita da room, da parte de cima do sprite da bola até a parte de baixo dele
draw_set_blend_mode(bm_normal);
// Coloquei isso porque, como disse antes, sempre precisa voltar ao normal depois para não afetar outras coisas.
Acabei de editar, agora testei e deu certo (em volta não fica tudo preto, só escurecido)
Se alguma coisa não der certo me avisem.
Última edição por Igor KinGamer em Sáb 04 Jul 2009, 19:24, editado 2 vez(es)
Igor KinGamer- Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Iluminacao
Alex FC escreveu:Ótima explicação! Você podia posta-la na área de turoriais?
FLWS!
É mesmo. Fiquei de cara aqui meu.
M.A.S.- Data de inscrição : 03/01/2009
Reputação : 0
Número de Mensagens : 377
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Iluminacao
Concordo!, é dificil achar na internet alugma explicação sobre modos Blend, parabéns! Com certeza tem que ir pra área de tutos!
Re: Iluminacao
Muito bom cara...
Perfeito msm, depois eu do uma estudada mais aprofundada no codigo...
vlwww
Perfeito msm, depois eu do uma estudada mais aprofundada no codigo...
vlwww
Rubens T [Stormy Games]- Data de inscrição : 15/04/2009
Reputação : 1
Número de Mensagens : 85
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Iluminacao
Vlw gente
Mas agora fui testar aqui e vi que o código da uns problemas...
Vou arrumar, e quando terminar posto o tuto
Mas agora fui testar aqui e vi que o código da uns problemas...
Vou arrumar, e quando terminar posto o tuto
Igor KinGamer- Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» GMS - iluminação no 3D
» Iluminação [Duvida]
» Engine de Iluminação
» [GM8-Lite] Iluminação
» mudar a cor do da sprite ou iluminação gml
» Iluminação [Duvida]
» Engine de Iluminação
» [GM8-Lite] Iluminação
» mudar a cor do da sprite ou iluminação gml
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos