Criar um construtor de paredes

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

Criar um construtor de paredes

Mensagem por Fledeber em Dom 09 Nov 2014, 22:55

Pessoal, estou pensando em criar um construtor de paredes.
O funcionamento vai ser simples.
Vai ser um único objeto chamado obj_parede contendo os comportamentos de colisão padrão, só que com vários sprites separados.
A ideia é verificar quais objetos estão na volta desta parede para dar o draw no sprite correto.

Exemplo:
- Tem um objeto parede a minha esquerda? Sim
- Tem um objeto parede abaixo? Sim
-- Então colocar um sprite de canto superior direito

Outro exemplo:
- Tem um objeto parede a minha esqueda? Sim
- Tem um objeto parede a minha direita? Sim
-- Então colocar um sprite de parede horizontal

Só mais um pra fixar:
- Tem um objeto parede a minha esquerda? Sim
- Tem um objeto parede a minha direita? Sim
- Tem um objeto parede acima de mim? Sim
- Tem um objeto parede abaixo de mim? Sim
-- Então colocar um sprite de cruzamento de paredes

Esta é mais ou menos o funcionamento que eu quero.
Eu fiz este código mas não sei direito o porque não funcionou como eu queria.

if (
place_meeting(x - 1, y, obj_wall)
and place_meeting(x + 1, y, obj_wall)
) {
sprite_index = spr_wall_yellow;
}

A ideia era pintar de amarelo apenas as paredes que estão na horizonal.
Mas acabou pintando outras paredes que não se encaixam nesta regra.

Alguém tem alguma sugestão?
Abraços!

Fledeber

Número de Mensagens : 23
Data de inscrição : 23/09/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Willy em Seg 10 Nov 2014, 00:02

Existe uma velha engine, muito velha mesmo, que eu fiz em 2010 com essa finalidade. Nesta época eu era bem inexperiente, portanto os códigos podem ser bem ilógicos e não otimizados (podem não, estão --\'). Mas, poderá servir como base pra você montar o seus próprio sistema. Clique aqui para ver!

Boa sorte e flws... blz

___________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 22
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Fledeber em Seg 10 Nov 2014, 11:04

Obrigado @Wily pela ajuda.
Na verdade esta vai ser a minha ideia.
Vou fazer todas as verificações para colocar o sprite certo. Mas apesar do meu código de exemplo ser parecido com o seu ele não está funcionando.

A ideia que neste exemplo ele só pintasse de amarelo todas as paredes que tem vizinhas em ambos os lados. Mas não é bem assim que ocorre.

Fledeber

Número de Mensagens : 23
Data de inscrição : 23/09/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Fledeber em Ter 11 Nov 2014, 13:56

Hoje fiz alguns experimentos e olha o resultado:

1) Este código deveria pintar apenas paredes que possuem um objeto a sua esquerda.
Como as paredes bem da esquerda não possuem vizinhos eles não deveriam ser pintados. Olha como ficou:
Código:
if(place_meeting(x-1, y, obj_wall)) {
    sprite_index = spr_wall_yellow;
}


2) Este código deveria pintar apenas paredes que possuem objetos abaixo. Como as paredes bem de baixo não tem vizinhos, então eles não deveriam ser pintados. Olha só o resultado:
Código:
if(place_meeting(x, y - 1, obj_wall)) {
    sprite_index = spr_wall_green;
}


A primeira imagem é como deveria ficar, e a segunda é sempre como ficou.
Alguém tem ideia do que pode estar errado.

Fledeber

Número de Mensagens : 23
Data de inscrição : 23/09/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Zero. em Ter 11 Nov 2014, 18:34

Tente utilizar collision_point, o place_meeting pega toda a mascara do obj, com o collision_point vc pode ser mais preciso com oque quer.

Zero.

Número de Mensagens : 1295
Idade : 20
Data de inscrição : 19/08/2010
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Isaque Onix em Ter 11 Nov 2014, 19:05

eae, bom, ao fazer a checagem, cheque a distancia exata se possível, por exemplo, se os sprites que você usa, são centralizados e teem o tamanho de 16x16, cheque como place_meeting(x+16,y+16,objeto) assim você evita certos erros, funciona muito bem se eles estiverem bem alinhados.

e com certos tipos de "pilhas de códigos" o código anterior pode atrapalhar o próximo, como você está fazendo uma checagem múltipla (direita, esquerda, em cima e em baixo) a posição dos códigos ajudam uns aos outros. tente salvar as posições em variáveis, assim, poderá se orientar melhor.

ex:

Código:
a_dir=place_meeting(x+16,y,objeto)
a_esq=place_meeting(x-16,y,objeto)
a_cima=place_meeting(x,y-16,objeto)
a_baix=place_meeting(x,y+16,objeto)
if(a_dir && a_esq && a_cima && a_baix){/*está cercado por todos os lados.*/}else if(!a_dir && !a_esq && a_cima && a_baix){/*está cercado por cima e por baixo.*/}else if(a_dir && a_esq && !a_cima && !a_baix){/*está cercado pela direita e pela esquerda.*/}else {/*um padrão para evitar erros, nesse caso, não esta cercado*/}

Isaque Onix

Número de Mensagens : 1597
Idade : 22
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Sewer Crawler em Ter 11 Nov 2014, 19:31

Fiz aqui com o seu código e ficou assim:

Sewer Crawler

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

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Isaque Onix em Ter 11 Nov 2014, 19:41

isso quer dizer que funcionou ou não?

a propósito, se não, meu código não é completo, é só um exemplo do que fazer...

Isaque Onix

Número de Mensagens : 1597
Idade : 22
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Sewer Crawler em Ter 11 Nov 2014, 19:44

Eu fiz com o código simples do Giancarlo. Não entendo por que com ele deu errado. '-'
Com o spr_yellow também deu certo, mas tive de montar os  blocos exatamente um ao  lado do outro.
Será que na hora de colocar os obj_wall na room algum bloco não ficou sobreposto?
Testei este "código", e também deu certo:
Código:
if !place_empty(x-1, y)
{
    sprite_index = spr_wall_yellow;
}

Sewer Crawler

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

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Fledeber em Ter 11 Nov 2014, 21:26

Galera, será que isso tem haver com eu ter colocado a origem dos spr_wall como sendo o centro? Troquei agora pra 0 e parece ter dado certo.

Fledeber

Número de Mensagens : 23
Data de inscrição : 23/09/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Sewer Crawler em Ter 11 Nov 2014, 23:11

Não deve ser isso não. Eu "centrei" a origin e só ficou meio fora da room, eu teria de refazer tudo:

Sewer Crawler

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

Voltar ao Topo Ir em baixo

Re: Criar um construtor de paredes

Mensagem por Conteúdo patrocinado Hoje à(s) 14:23


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