[Pergunta] Bordas de bloco, como desviar?

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

[Pergunta] Bordas de bloco, como desviar?

Mensagem por Luiz A. Oliveira em Qua 26 Jan 2011, 09:09

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.

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por saim em Qua 26 Jan 2011, 12:11

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

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por Luiz A. Oliveira em Qua 26 Jan 2011, 12:32


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

Mad é complicado de explicar

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por saim em Qua 26 Jan 2011, 14:42

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:
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

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por Willy em Qua 26 Jan 2011, 15:47

Você pode fazer o jogador verificar se esta nas quinas superiores assim:

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
Esse código provavelmente não vai dar certo pois eu não testei, mas apenas citei a logica que funcina (ja fiz algo semelhante com isso).
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.

___________


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 : 23
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: [Pergunta] Bordas de bloco, como desviar?

Mensagem por Minun em Qua 26 Jan 2011, 23:29

Olha que coisa!
Também tava precisando disso, que mundo pequeno.
Eu inda não consegui resolver @_@

Minun

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

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por Luiz A. Oliveira em Qui 27 Jan 2011, 07:49

vou tentar as duas maneiras, entrei no pc quase agora e quenado testar dou um edit
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"

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por saim em Qui 27 Jan 2011, 08:20

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.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por Luiz A. Oliveira em Qui 27 Jan 2011, 08:46

não entendi
0 ou 1 pra que e onde?
==edit== entendi agora
mas não funcionou, só faz ele travar o passo

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por saim em Qui 27 Jan 2011, 09:40

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.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Pergunta] Bordas de bloco, como desviar?

Mensagem por Conteúdo patrocinado Hoje à(s) 01:57


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