如何使我的文本框跟随GUI

时间:2015-10-01 22:17:55

标签: game-maker

我的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));
}

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

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

我把drawGUI开始时的地图/物理移动到了我想要的地方但是在滚动过程中有点离开了gui,这可以平滑但我不认为这是正确的答案(见上面的更新代码)。

我有一种感觉我需要说请成为视图的一部分而不是地图的一部分吗?

1 个答案:

答案 0 :(得分:1)

要在屏幕上绘制固定的内容,您有两个常用选项:

抽奖活动

此活动将在房间内绘制精灵,像素,线条等。为了使其显示在同一位置,您需要使用view_xviewview_yview来覆盖您正在绘制的内容。请注意,这两个都是数组,因此您应该使用您用于主显示器的任何视图。如果这对您没有意义,那么只需使用view_xview[0]view_yview[0]

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

绘制GUI事件

此活动不会在会议室内绘图,而是在屏幕上绘制 。因此,您应该使用与此匹配的坐标。要确定显示的宽度和高度,请使用display_get_width()display_get_height()方法。

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