segunda-feira, 6 de fevereiro de 2012

[Tedi] Criando Água ao estilo Minecraft

Qualidade

Criando Água ao estilo Minecraft
Estilosa

Detalhes
Criador: Tedi
Idéia Base: Minecraft e Terraria
Versão do GM: GM Lite e Pro
Dificuldade: Depende
Introdução
O que vai ser ensinado:
A idéia aqui é fazer um sistema de água como a do Minecraft, na qual a água escorre por objetos sólidos, mas quando não há nada a baixo, ou aos lados, ela cai, o sistema funcionou perfeitamente aqui no PC, só ocorreu um pequeno lag quando muitos objetos água se criaram.... {OPS, LAG CORRIGIDO}

Imagens:




O que realmente acontece aqui:
A idéia é:
-Checar se existe algum objeto abaixo do objeto água
Se não existir:
-Criar um objeto abaixo
Se Existir:
-Checar se existe algum objeto ao lado esquerdo
Se não existir
-Criar água ao lado esquerdo

-Checar se existe algum objeto ao lado direito
Se não existir
-Criar água ao lado direito



Let it rip:
Bem começamos criando as sprites:
Sprites
Crie 2 sprites:
spr_solido

spr_agua


Pronto, isso é bem simples...

Objetos
Crie 2 objetos
obj_solido

obj_agua




No obj_solido, apenas marque-o como Solid e coloque a sprite spr_solido



No obj_agua, coloque a sprite spr_agua
E no Create Event coloque o seguinte código:
(o codigo esta um pouco grande, mas é necessário para não ocorrer lag)

Código:
cima_solido=place_meeting(x,y-1,ob_solido)
baixo_solido=place_meeting(x,y+1,ob_solido)
esquerda_solido=place_meeting(x-1,y,ob_solido)
direita_solido=place_meeting(x+1,y,ob_solido)

cima_agua=place_meeting(x,y-1,ob_agua)
baixo_agua=place_meeting(x,y+1,ob_agua)
esquerda_agua=place_meeting(x-1,y,ob_agua)
direita_agua=place_meeting(x+1,y,ob_agua)


Explicação:
Aqui nós criamos 8 variáveis para nos auxiliar mais tarde.
place_meeting: Retorna True(verdadeiro) se houver um objeto na posição x e y indicada, ou False se não houver

Bem, agora vamos fazer a mágica da coisa, vamos fazer o script para checar espaços livres e criar objetos, mas, não será possível colocar no create event, pois:
O create event executa seus códigos ao iniciar o jogo, e se colocarmos nele, o jogo vai travar, pois estará criando e criando e criando objetos sem parar...

Por isso vamos fazer isso em um evento alarm (até fará o efeito parecido com o próprio minecraft, pois ele demora um pouco para criar a água (principalmente a lava)

Então, no create event ainda, coloque:

Código:
alarm[0]+=room_speed


Explicação:
Alarm[0] - chama o evento alarm 0
Room_speed - é equivalente a 1 segundo (padrão são 30 frames)

Agora vamos a mágica da coisa, no evento Alarm 0 coloque:

Código:
if baixo_solido=false and baixo_agua=false    //Se não houver nenhum objeto abaixo
{
instance_create(x,y+32,ob_agua)   //Cria um objeto agua
}
else
{
if esquerda_solido=false and esquerda_agua=false   //Se não houver nenhum objeto a esquerda
{
instance_create(x-32,y,ob_agua)    //Cria um objeto agua
}
if direita_solido=false and direita_agua=false   //Se não houver nenhum objeto a direita
{
instance_create(x+32,y,ob_agua)    //Cria um objeto agua
}
}


Explicação no próprio código

Pronto, agora é só mapear sua room e ver o resultado =D


VOCEIS: PERAAEEEEEE, isso ta lagado pra caramba!!!!
TEDI: Claro (é porque eu sou um troll mesmo) É porque a agua, se sair da room, continua a se criar, lagando tudo ;D

Pra isso vc só precisa fazer:


Pronto, agora sim, mapeie a room, de os créditos a mim kkk
DUVIDAS, COMO SEMPRE, POSTE AQUI OK?!
Flws flw

Um comentário: