Página 1 de 1

Como identificar colisão com objeto solido

Enviado: Qui Jan 05, 2017 2:59 pm
por Isquilo_Roedor
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
}

Re: Como identificar colisão com objeto solido

Enviado: Qui Jan 05, 2017 3:40 pm
por Dust
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...

Re: Como identificar colisão com objeto solido

Enviado: Qui Jan 05, 2017 7:34 pm
por Superbomber
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.)

Re: Como identificar colisão com objeto solido

Enviado: Sex Jan 06, 2017 11:32 am
por LenoCroix
faz igual SB  falou usa o place_free

Re: Como identificar colisão com objeto solido

Enviado: Sex Jan 06, 2017 1:18 pm
por Dust
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.