GML序列深度不正确
我想让一个序列弹出一个窗口,显示背包里物品的描述。我知道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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。