gpu_set_depth

此函数为GameMaker的2D绘图功能(精灵、形状、图元、文本等)设置深度(即z坐标)。

默认情况下,GameMaker 在绘制平面图形时使用层的深度,但此功能允许您使用自己的深度。此功能可用于在不同的深度绘制,或在各自的深度绘制单个精灵/图元。

重要信息 在层开始脚本中调用此函数时,不会更改层的深度 (请参阅 layer_script_begin)。如果您需要更改图层开始脚本中特定图层的深度,您应该使用 layer_force_draw_depth 来执行此操作。

注意GameMaker 仅在开始绘制新图层时更改深度,因此您可能需要恢复原始深度 (之前从 gpu_get_depth 保存 )) 在您完成绘制后,因此任何后续调用都不会受到深度更改的影响。

注意 深度值是近似值。如果您尝试以接近最大深度和最小深度的深度值绘制事物,则可能会由于计算引入的不准确性而无法绘制它们。

 

语法:

gpu_set_depth(depth);

参数类型描述
depthReal用于绘制的新深度值

 

返回:

N/A

 

示例 1:"depth = -y"

绘制事件

var _zwrite = gpu_get_zwriteenable();
var _ztest = gpu_get_ztestenable();
gpu_set_zwriteenable(true);
gpu_set_ztestenable(true);
var _depth = gpu_get_depth();

gpu_set_depth(-y);

draw_self();

gpu_set_depth(_depth);
gpu_set_zwriteenable(_zwrite);
gpu_set_ztestenable(_ztest);

上面的代码将用于绘制的深度设置为当前实例的 -y。如果这些实例的深度也设置为 -y,则一旦其他实例移动到其他实例的 " 后面",这提供了一种简单的方法来将这些实例绘制在其他实例的后面。

首先,使用 gpu_set_zwriteenablegpu_set_ztestenable 在 GPU 上启用 z 写入和 z 测试。它们的当前值分别存储在临时变量 _zwrite_ztest 中,当前深度也存储在临时变量 _depth 中。然后使用 gpu_set_depth 将深度设置为实例的 -y,并使用 draw_self 正常绘制实例。

最后,深度、z-writing 和 z-testing 都设置为之前的值,以免影响进一步的绘制。

 

示例 2:使用圆圈绘制沙漏形状

绘制事件

gpu_set_zwriteenable(true);
gpu_set_ztestenable(true);
matrix_set(matrix_view, matrix_build_lookat(220, 0, 90, 0, 0, 90, 0, 0, 1));
matrix_set(matrix_projection, matrix_build_projection_perspective_fov(60, room_width/room_height, 1, 10000));

var _depth = gpu_get_depth(); // store previous depth
var _col = draw_get_colour();

var n = 180;
for (var z = 0; z <= n; z += 10)
{
    gpu_set_depth(z);
    draw_set_colour(make_color_hsv(z / n * 255, 150, 250));
    draw_circle(0, 0, 40 + lengthdir_x(20, z / n * 360), false);
}

draw_set_colour(_col);
gpu_set_depth(_depth);        // restore previous depth

上面的代码在 Draw 事件中绘制了一个彩色的沙漏状形状。

首先,启用 z 写入和 z 测试 (gpu_set_zwriteenablegpu_set_ztestenable) 以及适当的投影 (matrix_build_projection_perspective_fov) 和视图矩阵 (matrix_build_lookat) 使用 matrix_set 构建和设置。接下来,存储当前的深度值和绘制颜色,以便稍后恢复。

在此之后,使用draw_circle在for循环中绘制几个圆。用于绘制每个圆的深度设置为循环变量z的值,每次迭代时增加10。圆的半径以某种方式变化,最终形状看起来像沙漏形状。绘制颜色会改变,以改变圆的颜色。

最后,绘制颜色和深度被设置回它们之前的值,以便不影响在实例层上的进一步绘制。