Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

[PROG] [Willy Tutorial] Como fazer um filho!

Tutoriais, videoaulas, guias e downloads para te ajudar nos estudos.
Avatar do usuário
Tutoriais & Aulas
Colaborador
Colaborador
Reações: 0
Mensagens: 110

[PROG] [Willy Tutorial] Como fazer um filho!

Mensagem por Tutoriais & Aulas » Qui Abr 28, 2016 10:55 pm

Autor original: Willy
Você sabe o que são pais e filhos?
Não? Então vamos descobrir!


Em algumas situações, você vai precisar criar objetos usando um objeto. Logicamente, em alguma situação você vai querer manipular este objeto que foi criado.
Mas, suponhamos que você crie cinco objetos com o mesmo nome, se você tentar alterar algum valor dele (velocidade, variável, etc.) todos os objetos com o mesmo nome vão sofrer alteração. E agora, o que fazer? Mas é claro, fazendo filhos (e automaticamente, um pai.)! Antes de pensar besteira (isso se já não pensou ao ver o titulo do tópico...), vamos deixar claro que “pais e filhos” são apenas termos para designar um “criador de objeto” (pai) e o “objeto criado” (filho).

A parte teórica é apenas isso que você acabou de ler, vamos fazer algo prático agora, criaremos um sistema simples para vermos como funciona um sistema de “pais e filhos”.

Sprites:
Inicie um novo projeto e crie três sprites da maneira que você quiser. Serão eles um bloco, uma bolinha e alguma coisa para representar um pai (uma bolinha maior). Procure cores diferentes uma das outras para facilitar a identificação deles. Marque todos como Center (exceto o bloco). Só vamos precisar desses sprites para o nosso exemplo.
Sprites em mãos, vamos criar os objetos agora.

Objetos: Três sprites, três objetos: obj_bloco, obj_pai e obj_filho.
obj_bloco: Marque apenas a opção solid.

obj_pai: Esse vai ser o nosso reprodutor, digo, nosso criador de objetos!
No evento create, vamos gerar o filho desse bloco com sua esposa, a variável!

Código: Selecionar todos

filho=instance_create(room_width/2,room_height/2,obj_filho)
“filho” é aqui que definimos quem será o filho desse objeto, vamos sempre usar “filho” quando nos referimos ao objeto que foi criado. Ao usarmos “room_width/2” e “room_height/2” estamos indicando que queremos criar o “obj_filho” no meio da room.
Veremos um exemplo de como usar o “pai” mais para frente. O esquema do pai é o mesmo que o esquema do filho!
Filho criado, agora vamos “definir” o seu futuro!

Código: Selecionar todos

filho.speed=choose(6,7,8) //Escolhe uma velocidade entre 6, 7 e 8
filho.direction=random(360) //Direção Aleatória
Usando “filho.”, estamos definindo um valor para ele graças ao “.”, pois esse ponto significa que queremos atribuir o valor á variável “filho” que no caso, é um objeto criado anteriormente. Sempre coloque as características do filho depois de criá-lo.
Pronto, criamos o filho, mas para que ele não “cresça” sem saber quem é seu pai, vamos dizer para ele quem é o papai!

Código: Selecionar todos

filho.pai=id
“id” é a IDentidade do pai. Cada objeto na room tem um ID diferente, e é aqui que acontece a mágica! Agora sabemos quem é o pai e quem é o filho! Coloque em “Depth” o valor “-1” para que fique sobre outros objetos. Isto encerra o nosso pai.

Agora vamos criar o nosso filho, o obj_filho:
Como já definimos o que ele vai fazer, não vamos criar nada no create.
Primeiramente, vamos fazer ele se destruir ao colidir com seu respectivo pai. Faremos isso no step:

Código: Selecionar todos

if place_meeting(x,y,pai){ //Se estiver em contato com seu pai
instance_destroy()//Se destroi.
}
Repare que usamos “pai” ao invés de “obj_pai”, pois se usássemos “obj_pai” iríamos destruir todos os objetos com o mesmo nome. Esse esquema pode ser usado para o filho também.
Na colisão com o obj_bloco, faremos algo simples, apenas se rebater:

Código: Selecionar todos

move_bounce_solid(1);
Nesse caso, ele vai rebater em todo objeto solido. Nada de mais até aqui.
Feito isso, coloque vários “obj_pai” na room, cerque toda a room usando o “obj_bloco”, teste o jogo e veja o que acontece. Se os filhos começarem a sumir quando colidirem com seus pais, seu sistema esta funcionando. Mas, que é o pai de quem? Siga o exercício abaixo e você vai descobrir!

Faremos um exercício simples para ver se você entendeu como usar os filhos e os pais! Vamos desenhar uma linha que vai ligar cada filho com seu pai!
Você vai precisar usar dois comandos, o "draw_line" e o "draw_sprite".

Código: Selecionar todos

draw_line(x1,y1,x2,y2)
Para usar o draw_line, você tem que colocar em ‘x1’ e ‘y1’ a respectiva posição (x,y), mas no ‘x2’ e no ‘y2’ você precisa colocar as coordenadas do pai.
Depois disso, coloque o seguinte comando:

Código: Selecionar todos

draw_sprite(sprite_index,image_index,x,y)//Desenha a sprite normalmente, mas sem efeitos especiais.
Isso vai servir para desenhar o sprite. Sem isso, só iria aparecer a linha.
Teste o jogo, se uma linha ligar o “obj_filho” com o “obj_pai” você conseguiu realizar o exercício! Parabéns!

Agora você já sabe o que são “pais e filhos” e como usar!

Espero que tenham gostado do tutorial!
Duvidas é só perguntar!
:blz:


[Edit]
O usuário RafaelCazzaroto  me enviou uma dúvida por MP, o que fez perceber que faltou um pequeno detalhe, porém importante a ser dito aqui.
Suponhamos que você queira fazer com que seu filho execute uma ação, como por exemplo, se autodestruir (que sádico ê.ê). Se você fizer assim:

Código: Selecionar todos

filho.instance_destroy();
Você não irá conseguir. O “.” é usado para se referir ou mudar alguma variável do filho.
Já que “filho” guarda o ID do filho, para fazer com que o mesmo execute uma ação, deve-se usar with, ficando dessa forma:

Código: Selecionar todos

with(filho){
instance_destroy();
}

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitante