Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[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
» como fazer inimigo desviar
» tem como fazer janelas com bordas arredondadas
» como fazer o inimigo desviar da parede?
» comO fazer um objeto desviar de outro?
» como fazer inimigo desviar
» tem como fazer janelas com bordas arredondadas
» como fazer o inimigo desviar da parede?
» comO fazer um objeto desviar de outro?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos