Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Como identificar colisão com objeto solido

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Isquilo_Roedor
Membro
Membro
Reações: 0
Mensagens: 20

Como identificar colisão com objeto solido

Mensagem por Isquilo_Roedor » Qui Jan 05, 2017 2:59 pm

Eu tenho o obj_player e nele eu coloquei um evento de colisão com o obj_blocos, que é parent de todos os blocos, e no evento de colisão usei o seguinte codigo, player_andando=false, que é a variavel que faz o personagem parar de andar, ou seja travar, o problema é que quando o objeto não está com a opção marcada "solid" o player simplesmente atravessa eles, e quando está marcado a opção solid ele não atravessa, na verdade esse não é o problema pelo contrário isso funciona exatamente como eu esperava, porém agora estou tendo uns problemas para desenhar o inventário e por isso queria saber como identificar no código da colisão quando o objeto é sólido.
Exemplo
Assim está o codigo atualmente
obj_player > event colission with > obj_blocos
obj_blocos code 

Código: Selecionar todos

global.player_andando=false
Agora o que eu quero fazer é isso
obj_blocos code

Código: Selecionar todos

if (objeto_x=solido){
global.player_andando=false
e aqui outros códigos que preciso que só sejam executados caso o objeto seja solido
}
if (objeto_x=!solido){
nada acontece, na verdade nem irei colocar essa parte é só pra esclarecer
}

Avatar do usuário
Dust
Membro
Membro
Reações: 0
Mensagens: 109
Localização: Santa Catarina

Re: Como identificar colisão com objeto solido

Mensagem por Dust » Qui Jan 05, 2017 3:40 pm

Bom... Eu não sei como identificar se objeto é sólido ou não, mas se tiver como, deve ter no help do gms.
Mas uma coisa que você pode fazer para deixar o objeto com colisão seria alterando a Mask dele, não lembro como trocar a Mask por código, estou no celular, mas seria algo do tipo se mask=sprite_sem_mask {global.sólido=false}, depois só fazer o mesmo com o oposto.
E para checar se há alguma colisão entre os objetos você pode checar a distância entre os objetos e qual tecla está sendo apertada e talz...

Avatar do usuário
Superbomber
Programador
Programador
Reações: 0
Mensagens: 283
Localização: Natal-RN

Re: Como identificar colisão com objeto solido

Mensagem por Superbomber » Qui Jan 05, 2017 7:34 pm

O evento de colisão ocorre apenas com objetos sólidos, por isso o resultado descrito. (Só para reforçar a informação aos novatos)

Existe a função place_free(), ela retorna true se a posição indicada NÃO houver um objeto sólido.
Exemplo básico:

Código: Selecionar todos

if( place_free(x + 1, y) && keyboard_check(vk_right) ){
   x += 1;
}
Você pode fazer a movimentação desta maneira, descartando a necessidade do evento de colisão. (Cujo o qual, recomendo nunca utilizar.)
Entrem neste link com o JavaScript desabilitado e vejam a mágica: https://tgmbrasil.com.br/?PageSpeed=n0script

Avatar do usuário
LenoCroix
Novato
Novato
Reações: 0
Mensagens: 8

Re: Como identificar colisão com objeto solido

Mensagem por LenoCroix » Sex Jan 06, 2017 11:32 am

faz igual SB  falou usa o place_free

Avatar do usuário
Dust
Membro
Membro
Reações: 0
Mensagens: 109
Localização: Santa Catarina

Re: Como identificar colisão com objeto solido

Mensagem por Dust » Sex Jan 06, 2017 1:18 pm

Só pra saber mesmo, se você utilizar o place_free com o movimento que o SB falou, não importa qual o objeto que ele colidir, a colisão será feita com todos objetos que estiverem marcados como sólidos.
E se você utilizar o !place_free você conseguirá identificar uma colisão, e poderá dar continuidade a um novo comando.

Responder

Quem está online

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