Onde as mentes criativas se encontram!


 
katisuke
Novato
Novato
Autor
Mensagens: 10
Registrado em: Ter Abr 04, 2017 12:16 am
Karma: 22

Evento de colisão não funcionou direito

Seg Abr 17, 2017 4:02 pm

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.

///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;
    }
}

 
Avatar do usuário
Adilson
Membro
Membro
Mensagens: 117
Registrado em: Qua Set 23, 2015 8:01 pm
Localização: Curitiba Parana
Karma: 232

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

Seg Abr 17, 2017 5:18 pm

Tire o solid dos espinhos
Vlw, Flw !!
 
katisuke
Novato
Novato
Autor
Mensagens: 10
Registrado em: Ter Abr 04, 2017 12:16 am
Karma: 22

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

Ter Abr 18, 2017 9:51 pm

O solid dele ja está desativado
Editado pela última vez por katisuke em Ter Abr 18, 2017 9:53 pm, em um total de 2 vezes.
 
Lolando
Novato
Novato
Mensagens: 17
Registrado em: Ter Nov 22, 2016 1:49 am
Karma: 45

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

Qua Abr 19, 2017 4:15 am

Você não precisa fazer o player tomar dano quando cair nos espinhos, coloca para quando ele tocar os espinhos
 
Avatar do usuário
Adilson
Membro
Membro
Mensagens: 117
Registrado em: Qua Set 23, 2015 8:01 pm
Localização: Curitiba Parana
Karma: 232

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

Qua Abr 19, 2017 12:34 pm

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.
Vlw, Flw !!
 
Avatar do usuário
Superbomber
Experiente
Experiente
Mensagens: 291
Registrado em: Sáb Jun 04, 2016 9:02 pm
Localização: Natal-RN
Karma: 391

Contato:

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

Qui Abr 20, 2017 6:44 pm

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:
/// 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
O que você chama de "falar bonito", as pessoas normais chamam de "falar normalmente, sem gírias ou xingamentos".

- Lispector, Eu.

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante