[Tuto] Como usar LightEngine

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

[Tuto] Como usar LightEngine

Mensagem por Lukbebalduke em Ter 14 Jan 2014, 15:46

Light Engine



Aprenda a usar a melhor engine de Iluminação do Game Maker !

Vou procurar ensinar a como usar uma ótima engine de iluminação no Game Maker , você que sempre teve problemas em fazer sistema de Iluminação isso vai te resolver muita coisa ! Pra deixar bem claro, você não vai montar uma mega engine de luz, vou te ensinar a usa-la !

Antes de mais nada essa engine não foi feita por mim, foi feita pelo BlinderXpinguin. Então antes de começar eu vou mostrar um print pra vocês verem o nível da parada


Passo 1: Importar os Scripts

Como já disse, vamos aprender a usar a engine e não montá-la do 0, então vocês vão baixar esses scripts

Código:
http://www.masterxy.bplaced.net/download.php

e importar como na imagem


E o deve ficar assim


Passo 2: Inicializando a engine de luz

Vamos lá, crie o obj_controle e colocar no create  Event Create 

Código:

lsys_init(1);
alpha = 0.8;

Vamos entender esse código , o lsys_init() serve para iniciar o sistema de luz , o numero dentro dele é a qualidade da iluminação , você pode botar de 0 a 1, quanto mais alto maior a qualidade , nesse caso, qualidade máxima. Já o alpha é uma variável que iremos usar depois, ele vai servir para definir o nível de claridade do ambiente, ela é importante porque nos permite mudar a claridade no meio do jogo, podemos fazer sistemas de dia e noite com isso.

Agora no end_step  Event Step  do nosso obj_controle

Código:
lsys_update(alpha);

Ai entra a nossa var alpha, isso serve pra atualizar o nível da claridade, no caso o lsys_update() nos devemos botar o alpha de 0 a 1 ali, sendo 0 o mais claro e 1 o mais escuro.

Agora no draw  Event Draw  do nosso obj_controle

Código:
lsys_draw();

Isso serve para desenhar as surfeces na tela, pois é assim que funciona a iluminação da engine, por surfaces. Não precisa botar nada ai.

E por fim no room_end  Event Other  ou game_end  Event Other  ou em qualquer outra ocasião que você for usar isso (não vejo muito utilidade fora essas) do obj_controle coloque

Código:
lsys_free();

Isso serve pra limpar tudo ! As luzes, as surfaces e os casters. Você simplesmente exclui tudo feito com essa engine.

Passo 3: Adicionando pontos de Luz

Agora vamos adicionar os nossos pontos de luz, a tocha, a lanterna, o Sol etc.. Oque raios você for usar. Vamos criar agora o obj_sol_feliz , no create  Event Create 

Código:
pl = lsys_light_add(x, y, 350, c_yellow);

Vamos lá, a funciona da seguinte maneira lsys_light_add(x, y, raio da luz, cor) , isso ai vai definir um novo ponto de luz e retornar o ID dele , nesse caso salvamos o ID no pl.

Agora no destroy  Event Destroy  do obj_sol_feliz bote

Código:
lsys_light_delete(pl);

Quando o nosso sol morrer daqui a muitos anos, a luz tem que acabar, o lsys_light_delete( id do ponto de luz ) serve pra destruir o ponto de luz, como o nosso ponto de luz é o pl , vamos destruir o pl quando o sol morrer.

Passo 4: Shadow casters

Os shadow casters (Não sei como traduzir isso de uma maneira descente) é o que vai impedir a luz de passar , por exemplo, vamos definir um shadow caster para o nosso obj_parede, porque a luz não vai passar pela nossa parede. E não vamos definir shadow caster para HUD , porque a nossa HUD vai deixa a luz passar.

Então no create  Event Create do obj_parade vamos botar

Código:
sc = lsys_caster_add(x, y);
lsys_caster_add_point(sc, 0, 0);
lsys_caster_add_point(sc, sprite_width, 0);
lsys_caster_add_point(sc, sprite_width, sprite_height);
lsys_caster_add_point(sc, 0, sprite_height);

A primeira função lsys_caster_add(x, y) adiciona um shadow caster e retorna o seu ID, que guardamos como sc. Já o lsys_caster_add_point( ID, x, y) serve para adicionar um vértice ao nosso shadow caster, esses quatro vértices vão fechar o quadrado da nossa parede. Como você vê nessa imagem


Lembrando que como usamos sprite_width e sprite_height só vai funcionar se a origin estiver em 0 , 0.

No  destroy Event Destroy do obj_parede agora

Código:
lsys_caster_delete(sc);

O lsys_caster_delete( ID ) serve para deletar um shadow caster , até porque quando nos derrubamos uma parede na vida real, a luz volta a passar por ali, não fica um Void no lugar da parede '-'

Acabamos de finalizar o básico , o sol já emite luz e a parede já esta "impermeável" a luz. Mas e se o nosso Sol feliz andasse ? Afinal ele não é uma estrela comum , ele é um Sol feliz ! Coloque ai para o seu Sol feliz andar no WASD , nas setas , no mouse , onde você quiser. Agora vamos aprender a fazer a luz acompanhar o nosso Sol feliz ! O seu game deve estar assim:


Passo 5: Alterando propriedades do ponto de luz !

Vamos lembrar sempre, o obj_sol_feliz não é o ponto de luz, o ponto de luz é o pl , que está junto com o obj_sol_feliz , mas se o objeto andar, o pl não vai seguir. Então vamos fazer o ponto de luz acompanhar o sol

No step  Event Step  coloque

Código:
lsys_light_set_position(pl, x, y);

O lsys_light_set_position( ID , x , y) serve para alterar a posição do ponto de luz. Nesse caso, ele vai estar sempre no mesmo lugar do sol feliz !

Mas o sol feliz começou a fica triste... (porque nesse tutorial o sol anda e tem sentimentos , não questione ¬¬) e quando o sol feliz fica triste ele vai perdendo seu brilho e sua cor amarela. Para mudar o raio da luz e fazer nosso sol brilhar menos vamos fazer assim no evento que deixa o sol triste

Código:
lsys_light_set_radius(pl, 200);

A função lsys_light_set_radius( ID , raio ) Altera o raio do ponto de luz.

Agora vamos tirar esse amarelo e botar uma coisa verde, porque estrelas tristes brilham verde oras ! Então coloque no evento que deixa o nosso sol triste

Código:
lsys_light_set_color(pl, c_lime);

O lsys_light_set_color( ID , cor ) muda a cor do ponto de luz.

Ok , agora que nosso sol já ta triste, brilha pouco e ta verde vamos deixa-lo de lado, somos maus , vamos supor que você queria criar uma lanterna , as lanternas não emitem uma aura de luz como as magias do Gandalf , elas soltam um feixe de luz. O mais incrível dessa engine é você pode alterar o formato da luz ! Para isso crie uma sprite com o formato da luz, tudo o que vai ser branco representa a luz, lembre-se de fazer um gradient de branco para transparente, pois isso vai fazer a luz ir ficando fraquinha, assim como na vida real. Para fazer a lanterna usarei essa sprite para formar a luz


Baixe ela ai para prosseguir com o tutorial. Agora crie um ponto de luz para a lanterna e tudo aquilo que fizemos com o sol lá no começo. Agora coloque no create  Event Create da lanterna

Código:
lsys_light_set_sprite( pl, spr_feixe_luz);

Lembrando que se o ID e o nome da sprite forem diferentes você precisa mudar. A função lsys_light_set_sprite( ID, sprite) faz com que o ponto de luz vire a sprite que você indicou, nesse caso o ponto de luz da nossa lanterna vai virar aquele feixe que apareceu logo a cima.

Certo, agora deixe-me mostrar como essa engine é foda, vamos fazer o feixe mirar para o mouse, para mostrar como mesmo com a sprite de feixe de luz ele ainda funciona super bem. Coloque no step Event Step 

Código:
direction = point_direction( x, y, mouse_x, mouse_y);
lsys_light_set_rotation( pl, direction);
image_angle = direction;

Certo, só vou explicar a função da light engine, o resto eu espero que você já saiba o que é. A função lsys_light_set_rotation( ID, angle) muda o angulo da sprite que virou luz, nesse caso, o feixe vai sempre apontar para o mouse.

Espero que tenham curtido esse tutorial, aqui fica o link da engine

Código:
http://www.mediafire.com/download/2vaa9kf55bmy5ae/TutoLightEngine.zip
Ou
Código:
https://mega.co.nz/#!bR0SwAJJ!bbGrPAa8jbWnfLsPK6DcTwuHEt5rg0s8mCBcbAr5Yn4

Se você também estive interessado na engine original, e não na modificada para este tuto:
Código:
http://www.masterxy.bplaced.net/download.php

Controles
Sol: use o mouse para mover o sol, e aperte Q para deixa-lo triste ou feliz.
Lanterna: AWDS para mover a lanterna e mouse para mirar
Aperte espaço para trocar entre o sol e a lanterna.

Qualquer duvida ou correção deixe ai nos comentários. Sei que ficou um pouco longo mais vale a pena ler , a engine é muito legal mesmo. Mais uma vez obrigado ao BlinderXpinguin por nos disponibilizar esta engine !


Última edição por Lukbebalduke em Ter 06 Jan 2015, 19:38, editado 4 vez(es)

Lukbebalduke

Ranking : Nota B
Número de Mensagens : 764
Data de inscrição : 06/07/2011
Notas recebidas : B - B - A - B
Reputação : 30
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 2

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por Gabreel em Qua 15 Jan 2014, 01:51

Ótimo tutorial pinpi, consigo imaginar milhares de aplicações! Smile

Gabreel

Número de Mensagens : 2227
Idade : 20
Data de inscrição : 02/10/2009
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por Jiraya em Qua 15 Jan 2014, 05:48

muito bom.

bati o olho e ja aprendi a usar algumas coisas q dessa engine.

parabens pelo tuto pinpi

+ rep

Jiraya

Ranking : Nota A
Número de Mensagens : 1134
Data de inscrição : 20/03/2010
Notas recebidas : A+A
Reputação : 108
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

https://www.facebook.com/seito.washiro.7

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por JoaoVanBlizzard em Qua 15 Jan 2014, 11:59

Uau, essa era justamente a peça que faltava na minha construção, a tempo que eu procurava efeitos assim para meus jogos, que era o principal motivo dos meus jogos demorarem tanto para serem finalizados, mas com esses scripts, eu posso conseguir ajustar a luminosidade de algumas cenas dos meus jogos, diminuindo a quantidade de vezes que preciso ficar recriando cenas para se ajustar aos ambientes dos meus jogos. baixado e aprovado. belo tutorial pimpi, aprovado.

JoaoVanBlizzard

Ranking : Nota B
Número de Mensagens : 1925
Idade : 38
Data de inscrição : 04/03/2012
Notas recebidas : B+B
Reputação : 144
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por DonutScore em Qua 15 Jan 2014, 12:02

Era tudo que eu precisava, agora quero ver como vai ficar em um jogo feito em pixel art

DonutScore

Número de Mensagens : 176
Idade : 23
Data de inscrição : 18/12/2013
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://donutscore.com

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por Lukbebalduke em Qua 15 Jan 2014, 21:38

Opa ! Obrigado pessoal, trouxe essa engine exatamente porque sabia que ela tem potencial muito alto e o pessoal do fórum saberia aproveita-la, o próprio Cascavelo junto com o molinware, haviam usado ela em um game e ficou show !

Também coloquei a engine original nos downloads , que é aquela engine dos prints iniciais , caso alguém queira dar uma olhada.

Lukbebalduke

Ranking : Nota B
Número de Mensagens : 764
Data de inscrição : 06/07/2011
Notas recebidas : B - B - A - B
Reputação : 30
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 2

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por joaox200 em Qui 25 Dez 2014, 21:00

Fala ai fera blz?
Poderia me dar uma "Luz" aqui?

Eu e uns colegas estamos criando um game plataforma.
Eu gostaria que meu personagem segura-se uma lanterna e dessa lanterna parti-se a luz.

E caso não seja pedir demais, gostaria e o braço dele se movimentaçe junto quando a gente mexe o cursor.

Desde já, agradeço. Cool

joaox200

Número de Mensagens : 2
Data de inscrição : 23/12/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por AlexBosquin em Seg 12 Jan 2015, 14:23

Eu gostei demais dessa função Luk como sempre vc é um cara foda s2. Então como testei e não funcionou para Game Maker Studio eu encontrei na net a versão compatível com o Game Maker Studio, se puder adicioná-lo ao tutorial acho que ajudaria a galera ;D

Código:
http://www61.zippyshare.com/v/87050067/file.html

AlexBosquin

Ranking : Nota C
Número de Mensagens : 621
Idade : 20
Data de inscrição : 10/07/2012
Notas recebidas : C
Reputação : 35
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://www.craftstudios.com.br

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por ANDREASCRUST em Ter 31 Mar 2015, 13:35

O MEU APARECEU O SEGUINTE ERRO:


___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Create Event
for object obj_parede:

Push :: Execution Error - Variable Get -5._lsys_casters(100001, -2147483648)
at gml_Script_lsys_caster_add (line 6) - for (i = 0; i < global._lsys_casters; i += 1)
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_lsys_caster_add (line 6)
called from - gml_Object_obj_parede_CreateEvent_1 (line 3) - sc = lsys_caster_add(x, y);

ANDREASCRUST

Número de Mensagens : 49
Idade : 23
Data de inscrição : 30/04/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Tuto] Como usar LightEngine

Mensagem por Conteúdo patrocinado Hoje à(s) 19:55


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