数字函数

GameMaker 中的实数被视为双精度浮点数 - 也就是说它们有一个小数点,小数点前后没有固定的数字位数 - 或 整数 - 也就是说它们是没有小数点值的整数。 例如,2 是一个整数,但 2.01 是一个浮点实数。

注意HTML5 目标上,所有实数都是双精度。

在处理跨平台开发时,整数和浮点数之间的区别非常重要,因为在 Windows PC 上进行的计算的精度与在移动设备上进行的相同计算的精度 不同 。这意味着您在进行比较时应该特别注意,例如:

if (image_index == 1)
{
    // Do something...
}

在上面的例子中,如果我们已经将 image_speed 设置为 0.25— 例如 — 那么经过四步之后,您可以假设 image_index 值将是 1,但是由于浮点数学的工作方式,它 可能 是像 1.0000002 这样的值,因此计算将不是 true。这些类型的错误很难进行调试,因此了解它们并提前计划并使用其他方法检查值或使用适当的基数或舍入函数 (下面列出) 将数字转换为整数是很好的 (有关浮点数学的更多信息以及为什么这是一个问题,请参阅这里)。例如,上面的代码可以写成:

if (floor(image_index) == 1)
{
    // Do something...
}

同样值得注意的是,当使用 YoYo Compiler 目标时,所有的表达式和函数都是从左到右计算的 ,而在所有其他目标平台上,它们是从右到左计算的 ,这意味着,例如,根据不同的平台,这将给出不同的结果:

val = max(num, ++num, num++);

注意 有关详细信息,请参阅评估顺序部分。

您还可以使用 GameMaker 中提供的特殊函数来设置浮点数学的 epsilon 值。当实数四舍五入到最接近的浮点数时,epsilon(也称为 " 机器 epsilon") 形成相对误差的上限,您可以使用以下函数设置和获取 epsilon 值:

函数参考

随机数和值

注意 在使用随机函数时,GameMaker在每次游戏开始时都保持相同的随机种子。这使得调试更加容易,因为你可以保证随机函数最初总是返回相同的值,但是如果你不希望发生这种情况,你必须首先在游戏开始时设置一个新的随机种子,可以使用randomiserandom_set_seed

舍入和截断

这些函数都将以某种方式舍入值,或者从各种给定值中选择一个值。

比较和精度

数学函数