Entrar
Últimos assuntos
» Servidor de Discord do fórum?por Super Games Ontem à(s) 01:27
» Problemas com a caixa de diálogo, ela é pequena e as letras não cabem dentro
por Rukasu777 Qui 16 maio 2024, 18:10
» Problemas com particulas
por RastaMaan Dom 12 maio 2024, 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
» 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
[Pergunta] Bordas de bloco, como desviar?
4 participantes
Página 1 de 1
[Pergunta] Bordas de bloco, como desviar?
Gostaria de saber como fazer quando o player colidir com os 4 ângulos do bloco quadrado desviar, mas se tocar no topo um move_contact_solid(,). Estilo BomberMan 2, só que em plataforma.
Se alguém não entendeu, me avise.
Se alguém não entendeu, me avise.
Re: [Pergunta] Bordas de bloco, como desviar?
Eu não entendi.
De qualquer forma, é possível saber de que lado ocorre a colisão. Você pode testar várias opções de place_meeting, tipo
if place_meeting(x+1,y,obj_bloco)
//está à direita
if place_meeting(x-1,y,obj_bloco)
//está à esquerda
if place_meeting(x,y+1,obj_bloco)
//está abaixo
if place_meeting(x,y-1,obj_bloco)
//está acima
De qualquer forma, é possível saber de que lado ocorre a colisão. Você pode testar várias opções de place_meeting, tipo
if place_meeting(x+1,y,obj_bloco)
//está à direita
if place_meeting(x-1,y,obj_bloco)
//está à esquerda
if place_meeting(x,y+1,obj_bloco)
//está abaixo
if place_meeting(x,y-1,obj_bloco)
//está acima
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Pergunta] Bordas de bloco, como desviar?
seta vermelha= mover contato solido
triangulo vermelho= angulo do quadrado
linha azul= desvio
se não colidir com o angulo move solido
se colidir com o angulo desvia para o outro lado
é complicado de explicar
Re: [Pergunta] Bordas de bloco, como desviar?
Acho que entendi, com a imagem. Você não quer que o jogador seja obrigado a acertar perfeitamente o espaço livre pra poder continuar o movimento.
Parece pouco provável que ocorra a colisão no centro sem ocorrer nas beiras. Talvez você queira deviar quando a colisão ocorrer somente nas beiras.
Vou pensando numa forma de fazer isso enquanto você me responde se estou certo.
Por favor, me mostre seus códigos de movimento. Minha responsta depende de como você faz pra se movimentar.
Ah, me diga também se você tem pro ou lite.
independente de como você se movimenta, é importante criar variáveis que indiquem que existe a colisão nos cantos. Uma forma de fazer isso é criando pequenos objetos, um em cada canto, e dizer, a cada um desses pequenos objetos, a que bloco ele pertence. Acho essa solução válida, mas um tanto complicada.
Sugiro definir variáveis para indicar onde são os cantos. Vou chamá-las de x1, x2, y1 e y2.
Eu não sei carregar uma imagem, então deixe-me tentar desenhar com um texto o que eu quero dizer:
......x1.....x2
.......|......|
y1 --+----+--
.......|......|
.......|......|
y2 --+----+--
.......|......|
Ficou horrível, eu sei, mas deu pra entender?
A partir daí, você precisa determinar se a colisão acontece entre esses valores. Se acontecer, move_contact, de outra forma, desvia. Pra desviar, depende da direção e da forma que você está andando.
Edit: algo assim:
Parece pouco provável que ocorra a colisão no centro sem ocorrer nas beiras. Talvez você queira deviar quando a colisão ocorrer somente nas beiras.
Vou pensando numa forma de fazer isso enquanto você me responde se estou certo.
Por favor, me mostre seus códigos de movimento. Minha responsta depende de como você faz pra se movimentar.
Ah, me diga também se você tem pro ou lite.
independente de como você se movimenta, é importante criar variáveis que indiquem que existe a colisão nos cantos. Uma forma de fazer isso é criando pequenos objetos, um em cada canto, e dizer, a cada um desses pequenos objetos, a que bloco ele pertence. Acho essa solução válida, mas um tanto complicada.
Sugiro definir variáveis para indicar onde são os cantos. Vou chamá-las de x1, x2, y1 e y2.
Eu não sei carregar uma imagem, então deixe-me tentar desenhar com um texto o que eu quero dizer:
......x1.....x2
.......|......|
y1 --+----+--
.......|......|
.......|......|
y2 --+----+--
.......|......|
Ficou horrível, eu sei, mas deu pra entender?
A partir daí, você precisa determinar se a colisão acontece entre esses valores. Se acontecer, move_contact, de outra forma, desvia. Pra desviar, depende da direção e da forma que você está andando.
Edit: algo assim:
- Código:
var lado, colidido;
lado=""
if instance_place(x,y,obj_bloco){ //se ocorre a colisão
colidido=instance_place(x,y,obj_bloco)
with (colidido){
if collision_line(y1,bbox_right,y2,bbox_right,other)
lado="direita"
if collision_line(x1,bbox_top,x2,bbox_top,other)
lado="acima"
if collision_line(y1,bbox_left,y2,bbox_left,other)
lado="esquerda"
if collision_line(y1,bbox_bottom,y2,bbox_bottom,other)
lado="abaixo"
}
move_contact_solid(direction,speed) //move_contact, não importa onde foi a colisão
if lado=""{ //se a colisão é na beirada (nenhuma das opções acima retornou verdadeira)
if keyboard_check(vk_left) or keyboard_check(vk_right){ //se indo pra os lados
if y>colidido.y2 //colisão na borda de baixo
y-=velocidade_de_desvio
else //colisão na borda de cima
y+=velocidade_de_desvio
}
else{ //se está movendo na vertical
if x>colidido.x2 //colisão na borda da direita
x+=velocidade_de_desvio
else //colisão na borda da esquerda
x-=velocidade_de_desvio
}
}
}
Última edição por saim em Qua 26 Jan 2011, 16:05, editado 2 vez(es)
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Pergunta] Bordas de bloco, como desviar?
Você pode fazer o jogador verificar se esta nas quinas superiores assim:
Colisão com o bloco:
Esse código não vai funcionar para AS DUAS quinas superiores, apenas na quina da esquerda. Se quiser q funcione nos dois cantos, vai ter que usar algo + ou - assim:
//Direita
Os valores de X vão depender do tamanho da sprite do bloco.
Crie também uma variavel nos blocos para saber se nao tem nada na esquerda e/ou na direita, sençao o jogador vai começar a recuar e/ou avançar quando estiver andando em uma fileira de blocos.
Espero ter ajudado.
Colisão com o bloco:
- Código:
if x>other.x+1{
//Colisão Normal
}else{
x-=1
}
Esse código não vai funcionar para AS DUAS quinas superiores, apenas na quina da esquerda. Se quiser q funcione nos dois cantos, vai ter que usar algo + ou - assim:
//Direita
- Código:
if x>other.x+1 && x<other.x+31
Os valores de X vão depender do tamanho da sprite do bloco.
Crie também uma variavel nos blocos para saber se nao tem nada na esquerda e/ou na direita, sençao o jogador vai começar a recuar e/ou avançar quando estiver andando em uma fileira de blocos.
Espero ter ajudado.
Re: [Pergunta] Bordas de bloco, como desviar?
Olha que coisa!
Também tava precisando disso, que mundo pequeno.
Eu inda não consegui resolver @_@
Também tava precisando disso, que mundo pequeno.
Eu inda não consegui resolver @_@
Minun- Data de inscrição : 26/01/2011
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Pergunta] Bordas de bloco, como desviar?
vou tentar as duas maneiras, entrei no pc quase agora e quenado testar dou um edit
edit==
aconteceu isso aqui:
edit==
aconteceu isso aqui:
- Código:
COMPILATION ERROR in code action
Error in code at line 8:
if collision_line(y1,bbox_right,y2,bbox_right,other)
^
at position 55: Wrong number of arguments to function or script.
- Spoiler:
- @off:ainda bem que esse cara ei foi banido, parecia que ele rastreou as mensagens que eu monitorava e comentou em todas: "deu fail"
Re: [Pergunta] Bordas de bloco, como desviar?
Ah, eu esqueci de alguns argumentos mesmo.
Acrescente 1 ou 0, dependendo de você querer colisão precisa ou não e mais um 0, pra explicar pra instância que ela própria não deve ser considerada na colisão. Isso pra todos os collision_line, claro.
Acrescente 1 ou 0, dependendo de você querer colisão precisa ou não e mais um 0, pra explicar pra instância que ela própria não deve ser considerada na colisão. Isso pra todos os collision_line, claro.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Pergunta] Bordas de bloco, como desviar?
não entendi
0 ou 1 pra que e onde?
==edit== entendi agora
mas não funcionou, só faz ele travar o passo
0 ou 1 pra que e onde?
==edit== entendi agora
mas não funcionou, só faz ele travar o passo
Re: [Pergunta] Bordas de bloco, como desviar?
Certeza que a colisão está acontecendo só nas beiras?
Não tenho como testar isso agora... Faça o seguinte: não declare "lado" como variável var. Rode o jogo no modo "debug" e cheque o valor de obj_player.lado
Se der qualquer coisa diferente de "", a colisão está acontecendo no meio do bloco, também.
Não tenho como testar isso agora... Faça o seguinte: não declare "lado" como variável var. Rode o jogo no modo "debug" e cheque o valor de obj_player.lado
Se der qualquer coisa diferente de "", a colisão está acontecendo no meio do bloco, também.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Tópicos semelhantes
» (Pergunta)Empurrar bloco
» [resolvido] Bordas do Sprite
» Margem nas bordas da câmera.
» [ajuda] Movimento "agarrar nas bordas"?
» IA - Desviar/Bloquear Projéteis
» [resolvido] Bordas do Sprite
» Margem nas bordas da câmera.
» [ajuda] Movimento "agarrar nas bordas"?
» IA - Desviar/Bloquear Projéteis
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|