如何让我的文本框跟随 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_xview
和 view_yview
偏移您正在绘制的任何内容。请注意,这两个都是数组,因此您应该使用您用于主显示的任何视图。如果这对您没有意义,那么只需使用 view_xview[0]
和 view_yview[0]
.
这种方法有一些缺点。如果您缩放或旋转视图,您绘制的任何内容也会缩放和旋转。既然这可能不是你想要的,那么我推荐另一种方法。
绘图 GUI 事件
此事件将在屏幕上绘制,而不是在房间内绘制。因此,您应该使用与此匹配的坐标。要确定显示器的宽度和高度,请使用 display_get_width()
和 display_get_height()
方法。
这是迄今为止首选的方法,因为您将在屏幕上而不是在房间内绘图。当您直接在屏幕上绘图时,此方法还支持视图缩放和旋转。
我的 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_xview
和 view_yview
偏移您正在绘制的任何内容。请注意,这两个都是数组,因此您应该使用您用于主显示的任何视图。如果这对您没有意义,那么只需使用 view_xview[0]
和 view_yview[0]
.
这种方法有一些缺点。如果您缩放或旋转视图,您绘制的任何内容也会缩放和旋转。既然这可能不是你想要的,那么我推荐另一种方法。
绘图 GUI 事件
此事件将在屏幕上绘制,而不是在房间内绘制。因此,您应该使用与此匹配的坐标。要确定显示器的宽度和高度,请使用 display_get_width()
和 display_get_height()
方法。
这是迄今为止首选的方法,因为您将在屏幕上而不是在房间内绘图。当您直接在屏幕上绘图时,此方法还支持视图缩放和旋转。