GML序列深度不正确

编程语言 2026-07-10

我想让一个序列弹出一个窗口,显示背包里物品的描述。我知道GML的 Draw是自上而下执行的,所以我不确定为什么这个序列会绘制在所有元素之下。下面是我的现状。

if (inv_open) {
    draw_inv_set(c_black, .75);
    draw_rectangle(0, 0, room_width, room_height, false);

    // inventory back
    draw_set_alpha(1);
    draw_sprite(spr_inventory, 0, CameraX() + 175, CameraMiddleY());

    // items
    for (var i = 0; i < ds_grid_width(plyr_inv); ++i) {
        var itemX = CameraX() + 125 + (i * item_seperation);
        var itemY = CameraY() + 95;
        var sprite = plyr_inv[# i, Item.Sprite];

        //check for additional rows
        if (i >= menu_width && i < menu_height * 2) {
            itemX = CameraX() + 125 + ((i - menu_width) * item_seperation);
            itemY = CameraY() + 127;
        }

        draw_sprite_ext(sprite, 0, itemX, itemY, items_scale, items_scale, 0, c_white, 1);

        //check for mouse interaction on drawn sprites
        if (point_in_rectangle(mouse_x, mouse_y, itemX - 5, itemY - 3, itemX + 24, itemY + 20)) {
            draw_inv_set(c_blue, 0.25);
            draw_rectangle(itemX - 5, itemY - 3, itemX + 24, itemY +20, false);
            draw_set_alpha(1);

            //click on item
            if (mouse_check_button_pressed(mb_left) && show_desc == false) {
                desc_seq = layer_sequence_create("Instances", CameraMiddleX(), CameraMiddleY(), sqDescAnimation_1);
            }
        }
    }

我的最可能的猜测是,我在End Step事件中的某些操作在干扰它,也许就是这个。

with (all)
{
    if (!on_ui_layer) depth = -bbox_bottom;
}

解决方案

你有没有尝试使用 "Draw_GUI" 来处理弹出窗口和背包等UI元素?

Draw_GUI允许你在视口之上绘制元素,这也意味着它们的位置相对于屏幕而不是房间来确定。这样你就不需要处理这些元素的深度问题。这也不需要 on_ui_layer 变量。

你可以试一试,把代码放在Draw_GUI事件中,但在这样做时要检查x、y坐标。(如果我大致看一下,就去掉 CameraX()CameraY() 相关的部分。)

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章