如何让我的文本框跟随 GUI

How can I make my text box follow the GUI

我的 gui 上有一个游戏中的文本框元素,它会在用户进入房间后加载。

goto_room = asset_get_index(target_room);
room_goto(goto_room);

//Initiate a player object on this room
with(instance_create(target_x, target_y, obj_Player)) {
     name = other.name;
}
with(instance_create(15, window_get_height()-15, txt_ChatBox)) {
     image_xscale = string_width("g") * 99;
}

对象层次结构是: txt_ChatBox>gui_textBox_base>ui_focus_base>ui_base

这是发生一切的抽奖活动

Draw GUI:
/// Draws the text box
if not uiVisible exit;  //if not visible, don't draw it!

x = view_xview[0] + 15;
y = (view_hview[0] - 15) + view_yview[0];

if isFocused {
    draw_rectangle(posX, posY, posX + (16 * image_xscale), posY + (16 * image_yscale), 2);
}

if(string_length(text) > 0 || isFocused) {
    draw_text(posX + 3, posY, string(text));
} else {
    draw_text(posX + 3, posY, string(placeholder));
}

在游戏中它可以工作,但它也会像这样将它的一部分添加到地图中

编辑:我发现的新东西是地图上的那个是控件的物理实例,但所有文本绘图都发生在 drawGUI 调用中。 IE。赋予其焦点的点击处理程序仅适用于地图上的那个。

我在 drawGUI 开始时将 map/physical 移动到我想要的位置,但在滚动过程中它与 gui 稍微偏离了一点,这可以平滑但我没有不认为这是正确的答案(见上面更新的代码)。

我觉得我需要说请成为视图的一部分而不是地图的一部分,对吧??

要在屏幕上绘制固定的东西,您有两种常见的选择:

抽奖活动

此事件将在 房间内绘制精灵、像素、线条等。为了使它出现在同一个地方,您需要用 view_xviewview_yview 偏移您正在绘制的任何内容。请注意,这两个都是数组,因此您应该使用您用于主显示的任何视图。如果这对您没有意义,那么只需使用 view_xview[0]view_yview[0].

这种方法有一些缺点。如果您缩放或旋转视图,您绘制的任何内容也会缩放和旋转。既然这可能不是你想要的,那么我推荐另一种方法。

绘图 GUI 事件

此事件将在屏幕上绘制,而不是在房间内绘制。因此,您应该使用与此匹配的坐标。要确定显示器的宽度和高度,请使用 display_get_width()display_get_height() 方法。

这是迄今为止首选的方法,因为您将在屏幕上而不是在房间内绘图。当您直接在屏幕上绘图时,此方法还支持视图缩放和旋转。