我的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调用中。即为焦点提供焦点的on处理程序仅适用于on map。
我把drawGUI开始时的地图/物理移动到了我想要的地方但是在滚动过程中有点离开了gui,这可以平滑但我不认为这是正确的答案(见上面的更新代码)。
我有一种感觉我需要说请成为视图的一部分而不是地图的一部分吗?
答案 0 :(得分:1)
要在屏幕上绘制固定的内容,您有两个常用选项:
抽奖活动
此活动将在房间内绘制精灵,像素,线条等。为了使其显示在同一位置,您需要使用view_xview
和view_yview
来覆盖您正在绘制的内容。请注意,这两个都是数组,因此您应该使用您用于主显示器的任何视图。如果这对您没有意义,那么只需使用view_xview[0]
和view_yview[0]
。
这种方法有一些缺点。如果缩放或旋转视图,您绘制的任何内容也将缩放和旋转。看来这可能不是你想要的,那么我推荐另一种方法。
绘制GUI事件
此活动不会在会议室内绘图,而是在屏幕上绘制 。因此,您应该使用与此匹配的坐标。要确定显示的宽度和高度,请使用display_get_width()
和display_get_height()
方法。
这是目前首选的方法,因为您将绘制到屏幕上,而不是在房间内。当您直接绘制到屏幕时,此方法还支持视图缩放和旋转。