Entrar
Últimos assuntos
» Problemas com particulaspor RastaMaan Ontem à(s) 17:03
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08
» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43
» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16
» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45
» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18
» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30
» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07
» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45
» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51
» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31
» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11
» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56
Criar um construtor de paredes
5 participantes
Página 1 de 1
Criar um construtor de paredes
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!
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- Data de inscrição : 23/09/2011
Reputação : 1
Número de Mensagens : 23
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Criar um construtor de paredes
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...
Boa sorte e flws...
Re: Criar um construtor de paredes
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.
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- Data de inscrição : 23/09/2011
Reputação : 1
Número de Mensagens : 23
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Criar um construtor de paredes
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:
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:
A primeira imagem é como deveria ficar, e a segunda é sempre como ficou.
Alguém tem ideia do que pode estar errado.
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- Data de inscrição : 23/09/2011
Reputação : 1
Número de Mensagens : 23
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Criar um construtor de paredes
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.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Criar um construtor de paredes
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:
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*/}
Re: Criar um construtor de paredes
Fiz aqui com o seu código e ficou assim:
Sewer Crawler- Data de inscrição : 08/10/2014
Reputação : 27
Número de Mensagens : 236
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Criar um construtor de paredes
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...
a propósito, se não, meu código não é completo, é só um exemplo do que fazer...
Re: Criar um construtor de paredes
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:
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- Data de inscrição : 08/10/2014
Reputação : 27
Número de Mensagens : 236
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Criar um construtor de paredes
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- Data de inscrição : 23/09/2011
Reputação : 1
Número de Mensagens : 23
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Criar um construtor de paredes
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- Data de inscrição : 08/10/2014
Reputação : 27
Número de Mensagens : 236
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos