Conectar-se
Quem está conectado
27 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 27 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 23/09/2011
Número de Mensagens : 23
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

Criar um construtor de paredes

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!
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1846
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 254

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: Criar um construtor de paredes

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
avatar
Data de inscrição : 23/09/2011
Número de Mensagens : 23
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

Re: Criar um construtor de paredes

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.
avatar
Data de inscrição : 23/09/2011
Número de Mensagens : 23
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

Re: Criar um construtor de paredes

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.
avatar
Data de inscrição : 19/08/2010
Número de Mensagens : 1299
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 47

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuário

Re: Criar um construtor de paredes

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.
avatar
Data de inscrição : 15/08/2010
Número de Mensagens : 1597
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 147

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://spyreserver.16mb.com

Re: Criar um construtor de paredes

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*/}
avatar
Data de inscrição : 08/10/2014
Número de Mensagens : 236
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 27

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Criar um construtor de paredes

em Ter 11 Nov 2014, 19:31
Fiz aqui com o seu código e ficou assim:
avatar
Data de inscrição : 15/08/2010
Número de Mensagens : 1597
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 147

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://spyreserver.16mb.com

Re: Criar um construtor de paredes

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...
avatar
Data de inscrição : 08/10/2014
Número de Mensagens : 236
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 27

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Criar um construtor de paredes

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;
}
avatar
Data de inscrição : 23/09/2011
Número de Mensagens : 23
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

Re: Criar um construtor de paredes

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.
avatar
Data de inscrição : 08/10/2014
Número de Mensagens : 236
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 27

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Criar um construtor de paredes

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:
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum