Página 1 de 1

Evento de colisão não funcionou direito

Enviado: Seg Abr 17, 2017 4:02 pm
por katisuke
No meu jogo, tem o objeto espinhos, se o personagem tocar neles a vida do player vai a 0 e ele morre, ate ai tudo bem, porem, se eu pular de uma altura muito grande
o efeito de colisão não funciona da maneira esperada, e o personagem fica dentro do espinho sem levar dano.

Ate mesmo, se eu tiver no solo, e tiver uma rampa, e eu desça a rampa e entre nos espinhos, não acontece nada, o espinho so funciona quando eu caio sobre ele
de uma altura razoável.
Aqui está o codigo q eu usei para o player levar dano. Esse codigo ta no evento collision com o player do espinho.

Código: Selecionar todos

///Damage the entity!
if (other.can_damage)
if (other.vsp > 0)
{
    yy = other.bbox_bottom-other.y;
    if (other.yprevious+yy < mid_y())
    {
        other.take_damage += 10;
        other.vsp = -2.5;
    }
}


Re: Evento de colisão não funcionou direito

Enviado: Seg Abr 17, 2017 5:18 pm
por Adilson
Tire o solid dos espinhos

Re: Evento de colisão não funcionou direito

Enviado: Ter Abr 18, 2017 9:51 pm
por katisuke
O solid dele ja está desativado

Re: Evento de colisão não funcionou direito

Enviado: Qua Abr 19, 2017 4:15 am
por Lolando
Você não precisa fazer o player tomar dano quando cair nos espinhos, coloca para quando ele tocar os espinhos

Re: Evento de colisão não funcionou direito

Enviado: Qua Abr 19, 2017 12:34 pm
por Adilson
Você mostra uma var "bbox_bottom" que não tem como saber o valor, um script que não sabemos....Como podemos ajudar?
Sem contar que você parece estar sendo ilógico, primeiro retira o jogador da posição, de depois verifica se ele esta lá

Recomendo que estude mais, começe com tutoriais basicos.

Re: Evento de colisão não funcionou direito

Enviado: Qui Abr 20, 2017 6:44 pm
por Superbomber
Adilson escreveu:Você mostra uma var "bbox_bottom" que não tem como saber o valor, um script que não sabemos....Como podemos ajudar?
Sem contar que você parece estar sendo ilógico, primeiro retira o jogador da posição, de depois verifica se ele esta lá

Recomendo que estude mais, começe com tutoriais basicos.
Cara, o próprio nome da variável diz o que é > bbox_bottom

"Sem contar que você parece estar sendo ilógico, primeiro retira o jogador da posição, de depois verifica se ele esta lá"
Ele não retira o jogador da posição. :detetive:

@katisuke

Cara isso é um problema muito básico e fácil de resolver. (qualquer programador com experiência razoável resolve isso fácil, não entendi porque ninguém respondeu ainda. :hmm: )

Primeiro que você verifica a velocidade vertical do player(other.vsp), por isso não dá colisão quando ele ta andando. (na rampa como você disse)
Segundo, você faz aquele calculo embolado para ver se o player estava acima do meio do espinho. (o espinho só machuca por cima, certo?)
Por isso quando o player cai de um lugar baixo ele deve "travar" com o evento de colisão antes de alcançar o centro, já que está lento.

Dito os erros, vou dar uma recomendação:
Nunca use o evento de colisão, é ruim pakas. :yes:

Eu poderia dar um código de exemplo, mas o ideal seria você mudar muita coisa.
E se for pra exemplificar de forma que funcione como você fez o game... Bem, eu não sei como você fez o game. :shrug:

Mas eu vou lhe dar o seu mesmo código com umas melhorias:

Código: Selecionar todos

/// This is Sparta!
if(other.can_damage && other.bbox_bottom < y+(sprite_height/2)){
   other.take_damage += 10;
   other.vsp = -2.5;
}
Isso é só pra lhe dar uma luz. Você já conhece os erros, avante a corrigi-los! :D