Fixed point number
Mais ações
O ZDoom comumente representa números de ponto fixo como inteiros de 32 bits, com a parte inteira do número representado armazenada nos 16 bits superiores, e com a parte fracionária (em 65536 avos) armazenada nos 16 bits inferiores.
Em outras palavras, a representação em ponto fixo de um número é esse número vezes 65536.
Para fazer multiplicações e divisões em números de ponto fixo em scripts ACS, você pode usar funções como FixedMul e FixedDiv.
Você pode converter um inteiro para uma representação em ponto fixo desse inteiro simplesmente deslocando o inteiro desejado 16 bits para a esquerda:
int myCoolInteger = 72; int myCoolFixedPointValue = myCoolInteger << 16; //Result is 4718592
Fazendo o caminho inverso é tão fácil quanto...
int myCoolFixedPointValue = 4718592; int myCoolInteger = myCoolFixedPointValue >> 16; //Result is 72
Você também pode especificar números de ponto fixo como literais em scripts ACS:
int myFixedPointNumber = 1.5;
myFixedPointNumber agora é (1.5 * 65536) = 98304. Se a intenção for um valor inteiro, você deve usar um ponto decimal, por exemplo 4.0, ou usar o deslocamento para a esquerda descrito acima; o ACS não sabe que tipo um número deveria ser.