Onde as mentes criativas se encontram!


 
Cambalinho
Membro
Membro
Autor
Mensagens: 57
Registrado em: Qui Jul 20, 2017 9:59 am

GML: como posso alterar a mascara de colisão?

Sex Nov 17, 2017 4:32 pm

se a propriedade do objecto bbox_bottom(por exemplo) é só de leitura, como posso alterar os dados?
o objectivo é poder controlar a colisão 1 pouco antes de tocar na parede, sem usar o evento Step.
 
Cambalinho
Membro
Membro
Autor
Mensagens: 57
Registrado em: Qui Jul 20, 2017 9:59 am

Re: GML: como posso alterar a mascara de colisão?

Sáb Nov 25, 2017 1:10 pm

após varias tentativas eu consegui fazer o script. o Manual não é bem explicito sobre as funções de edição do rectangulo de colisão :(
existe outra forma, mas não consigo utilizar a função sprite_collision_mask() :(
///SetCollisionMask(Sprite, Width, Height, Distance);

//getting the mask size:
Width=argument1;
Height=argument2;
distance=argument3;

//copy the sprite to the variable:
sprite=sprite_duplicate(argument0);

//change the object sprite:
self.sprite_index=sprite;
self.image_xscale=(Width+distance*2)/self.sprite_width;
self.image_yscale=(Height+distance*2)/self.sprite_height;
//change the collision rectangle mask:
//what i just did was just change the Origin(X,Y) of the sprite
sprite_set_offset(self.sprite_index,
    sprite_get_xoffset(self.sprite_index)+distance/self.image_xscale,
    sprite_get_yoffset(self.sprite_index)+distance/self.image_yscale);

- eu aconselho usar esta função no evento Create;
- o evento Collision será executado normalmente, mas com a pequena diferença do script(imagina o distance ser 5. se o jogador estiver a 5 pixels da parede, o evento Collision será executado).
o problema aqui, sem essa ajuda do Manual, foi que tive de converter os valores para a escala da imagem. foram muitas tentativas e tiros no escuro por não ter esta informação :(
"This function can be used to set the x and y origin of a sprite, and takes relative values based on the (0,0) position being the upper left corner of the sprite. "
mas fiquei a saber o mesmo :(
mas se alguém me souber explicar, por favor o faça.

Quem está online

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