godot引擎学习6
项目管理器结构: 主要类ProjectManager
1,CanvasItem : public Node 任何2d的基类。
void _draw ( ) virtual
调用(如果存在)以绘制画布项。
Control : public CanvasItem 所有用户界面节点都继承自控件。控件的定位点和页边距相对于其父控件调整其位置和大小。
所有与UI相关的节点的基类。 Control 其特征是定义范围的边界矩形、相对于其父控件或当前视区的定位点位置以及表示定位点偏移的边距。当节点、其父节点或屏幕大小发生变化时,页边距自动更新。
相关属性:
枚举 FocusMode :焦点相关
FOCUS_NONE = 0 ---节点无法获取焦点。与一起使用 focus_mode .
FOCUS_CLICK = 1 ---节点只能通过鼠标点击来获取焦点。与一起使用 focus_mode .
FOCUS_ALL = 2 ---该节点可以通过鼠标单击或使用键盘上的箭头和制表键来获取焦点。与一起使用 focus_mode .
枚举 CursorShape : 光标显示位置与形状
CURSOR_ARROW = 0 ---当用户悬停节点时,显示系统的箭头鼠标光标。与一起使用 mouse_default_cursor_shape .
CURSOR_IBEAM = 1 ---用户悬停节点时,显示系统的工字梁鼠标光标。工字钢指针的形状类似于“I”。它告诉用户可以突出显示或插入文本。
CURSOR_POINTING_HAND = 2 ---用户悬停节点时,显示系统的鼠标指针。
CURSOR_CROSS = 3 ---用户悬停节点时,显示系统的鼠标光标。
CURSOR_WAIT = 4 ---当用户悬停在节点上时,显示系统的等待鼠标光标,通常是沙漏。
CURSOR_BUSY = 5 ---用户悬停节点时,显示系统繁忙的鼠标光标。通常是沙漏。
CURSOR_DRAG = 6 ---当用户悬停在节点上时,显示系统的拖动鼠标光标,通常是闭合的拳头或十字符号。它告诉用户他们当前正在拖动一个项目,如场景停靠中的节点。
CURSOR_CAN_DROP = 7 ---当用户悬停节点时,显示系统的鼠标光标。它可以是一只张开的手。它告诉用户,他们可以放下当前正在抓取的项目,就像场景停靠中的节点一样。
CURSOR_FORBIDDEN = 8 ---用户悬停节点时,显示系统禁止使用的鼠标光标。通常是一个交叉的圆。
CURSOR_VSIZE = 9 ---当用户悬停节点时,显示系统的垂直调整鼠标光标。双头垂直箭头。它告诉用户可以垂直调整窗口或面板的大小。
CURSOR_HSIZE = 10 ---当用户悬停节点时,显示系统的水平调整鼠标光标。双头水平箭头。它告诉用户可以水平调整窗口或面板的大小。
CURSOR_BDIAGSIZE = 11 ---当用户悬停节点时,显示系统的窗口调整鼠标光标大小。光标是一个从左下到右上的双头箭头。它告诉用户可以水平和垂直调整窗口或面板的大小。
CURSOR_FDIAGSIZE = 12 ---当用户悬停节点时,显示系统的窗口调整鼠标光标大小。光标是一个从左上到右下的双头箭头,与 CURSOR_BDIAGSIZE . 它告诉用户可以水平和垂直调整窗口或面板的大小。
CURSOR_MOVE = 13 ---当用户悬停节点时,显示系统的移动鼠标光标。它显示两个90度角的双头箭头。它告诉用户他们可以自由移动UI元素。
CURSOR_VSPLIT = 14 ---用户悬停节点时,显示系统的垂直拆分鼠标光标。在窗户上,它和 CURSOR_VSIZE .
CURSOR_HSPLIT = 15 ---用户悬停节点时,显示系统的水平拆分鼠标光标。在窗户上,它和 CURSOR_HSIZE .
CURSOR_HELP = 16 ---当用户悬停节点时,显示系统的帮助鼠标光标,一个问号。
枚举 LayoutPreset :
PRESET_TOP_LEFT = 0 ---将所有4个锚都捕捉到父控件边界的左上角。与一起使用 set_anchors_preset .
PRESET_TOP_RIGHT = 1 ---将所有4个锚都捕捉到父控件边界的右上角。与一起使用 set_anchors_preset .
PRESET_BOTTOM_LEFT = 2 ---将所有4个锚都捕捉到父控件边界的左下角。与一起使用 set_anchors_preset .
PRESET_BOTTOM_RIGHT = 3 ---将所有4个锚都捕捉到父控件边界的右下角。与一起使用 set_anchors_preset .
PRESET_CENTER_LEFT = 4 ---将所有4个锚点捕捉到父控件边界左边缘的中心。与一起使用 set_anchors_preset .
PRESET_CENTER_TOP = 5 ---将所有4个锚点捕捉到父控件边界上边缘的中心。与一起使用 set_anchors_preset .
PRESET_CENTER_RIGHT = 6 ---将所有4个锚点捕捉到父控件边界右边缘的中心。与一起使用 set_anchors_preset .
PRESET_CENTER_BOTTOM = 7 ---将所有4个锚点都捕捉到父控件边界下边缘的中心。与一起使用 set_anchors_preset .
PRESET_CENTER = 8 ---将所有4个锚点捕捉到父控件边界的中心。与一起使用 set_anchors_preset .
PRESET_LEFT_WIDE = 9 ---将所有4个锚点捕捉到父控件的左边缘。左边距变为相对于左边缘,上边距变为相对于节点父级的左上角。与一起使用 set_anchors_preset .
PRESET_TOP_WIDE = 10 ---将所有4个锚点捕捉到父控件的上边缘。左边距相对于左上角、上边缘相对于上边缘、右边缘相对于节点父节点的右上角。与一起使用 set_anchors_preset .
PRESET_RIGHT_WIDE = 11 ---将所有4个锚点都对齐到父控件的右边缘。右边距变为相对于右边缘,上边距变为相对于节点父节点右上角。与一起使用 set_anchors_preset .
PRESET_BOTTOM_WIDE = 12 ---将所有4个锚点捕捉到父控件的下边缘。左边距变为相对于左下角,下边缘变为相对于下边缘,右边缘变为相对于节点父节点右下角。与一起使用 set_anchors_preset .
PRESET_VCENTER_WIDE = 13 ---将所有4个锚点都捕捉到一条垂直线,该垂直线将父控件切成两半。与一起使用 set_anchors_preset .
PRESET_HCENTER_WIDE = 14 ---将所有4个锚点对齐到一条水平线,该水平线将父控件切成两半。与一起使用 set_anchors_preset .
PRESET_WIDE = 15 ---将所有4个锚点对齐到父控件的各个角。应用此预设和 Control 将适合其父控件。这相当于编辑器中的“完整矩形”布局选项。与一起使用 set_anchors_preset .
枚举 LayoutPresetMode :
PRESET_MODE_MINSIZE = 0
PRESET_MODE_KEEP_WIDTH = 1
PRESET_MODE_KEEP_HEIGHT = 2
PRESET_MODE_KEEP_SIZE = 3
枚举 SizeFlags :
SIZE_FILL = 1 ---告诉家长 Container 展开此节点的边界以填充所有可用空间,而不推送任何其他节点。与一起使用 size_flags_horizontal 和 size_flags_vertical .
SIZE_EXPAND = 2 ---告诉家长 Container 以使此节点占用您标记的轴上的所有可用空间。如果将多个相邻节点设置为展开,则它们将根据拉伸比共享空间。见 size_flags_stretch_ratio . 与一起使用 size_flags_horizontal 和 size_flags_vertical .
SIZE_EXPAND_FILL = 3 ---将节点的大小标志设置为“填充”和“展开”。有关更多信息,请参阅上面的2个常量。
SIZE_SHRINK_CENTER = 4 ---告诉家长 Container 使节点本身居中。它基于控件的边界框将控件居中,因此不使用填充或展开大小标志。与一起使用 size_flags_horizontal 和 size_flags_vertical .
SIZE_SHRINK_END = 8 ---告诉家长 Container 要使节点与其端部对齐,请在底部或右侧边缘对齐。它不适用于填充或展开大小标志。与一起使用 size_flags_horizontal 和 size_flags_vertical .
枚举 MouseFilter :
MOUSE_FILTER_STOP = 0 ---控件将通过以下方式接收鼠标按钮输入事件: _gui_input 如果单击。控制中心将收到 mouse_entered 和 mouse_exited 信号。这些事件将自动标记为已处理,并且不会进一步传播到其他控件。这也会导致其他控件中的信号阻塞。
MOUSE_FILTER_PASS = 1 ---控件将通过以下方式接收鼠标按钮输入事件: _gui_input 如果单击。控制中心将收到 mouse_entered 和 mouse_exited 信号。如果此控件不处理该事件,则将考虑父控件(如果有),依此类推,直到没有更多的父控件可以潜在地处理它。这也允许信号在其他控件中触发。即使没有任何控件处理它,事件仍将自动处理,因此不会激发未处理的输入。
MOUSE_FILTER_IGNORE = 2 ---控件不会通过以下方式接收鼠标按钮输入事件: _gui_input . 控件也不会接收 mouse_entered 也不 mouse_exited 信号。这不会阻止其他控件接收这些事件或触发信号。忽略的事件不会自动处理。
枚举 GrowDirection :
GROW_DIRECTION_BEGIN = 0 ---如果控件的最小大小更改为大于其在各自轴上的当前大小,则控件将向左或向上增长以弥补。
GROW_DIRECTION_END = 1 ---如果控件的最小大小更改为大于其在各自轴上的当前大小,则控件将向右或向下扩展以进行弥补。
GROW_DIRECTION_BOTH = 2 ---如果控件的最小大小更改为大于当前大小,则控件将在两个方向上平均增长以弥补。
枚举 锚 :
ANCHOR_BEGIN = 0 ---将4个锚的一侧之一捕捉到节点的原点 Rect ,在左上角。把它和一个 anchor_* 成员变量,如 anchor_left . 要同时更改所有4个锚,请使用 set_anchors_preset .
ANCHOR_END = 1 ---将4个锚的一侧之一捕捉到节点的末端 Rect 在右下角。把它和一个 anchor_* 成员变量,如 anchor_left . 要同时更改所有4个锚,请使用 set_anchors_preset .
常量
NOTIFICATION_RESIZED = 40 ---节点更改大小时发送。使用 rect_size 以获得新尺寸。
NOTIFICATION_MOUSE_ENTER = 41 ---鼠标指针进入节点时发送。
NOTIFICATION_MOUSE_EXIT = 42 ---鼠标指针退出节点时发送。
NOTIFICATION_FOCUS_ENTER = 43 ---节点获取焦点时发送。
NOTIFICATION_FOCUS_EXIT = 44 ---节点失去焦点时发送。
NOTIFICATION_THEME_CHANGED = 45 ---当节点的 theme 更改,就在Godot重新绘制控件之前。当你调用 add_*_override 方法。
NOTIFICATION_MODAL_CLOSE = 46 ---打开模式对话框关闭时发送。见 show_modal .
NOTIFICATION_SCROLL_BEGIN = 47 ---此节点位于 ScrollContainer 它已经开始滚动。
NOTIFICATION_SCROLL_END = 48 ---此节点位于 ScrollContainer 它已停止滚动。
Panel : public Control
面板是一个 Control 显示不透明背景。它通常用作其他类型的 Control 节点。StyleBox
2, ProjectManager : public Control
成员控件:
TabContainer *tabs;
ProjectList *_project_list;
LineEdit *search_box;
Label *loading_label;
OptionButton *filter_option;
Button *run_btn;
Button *open_btn;
Button *rename_btn;
Button *erase_btn;
Button *erase_missing_btn;
Button *about_btn;
EditorAssetLibrary *asset_library;
FileDialog *scan_dir; 扫描对话框
ConfirmationDialog *language_restart_ask;
ConfirmationDialog *erase_ask;
Label *erase_ask_label;
CheckBox *delete_project_contents;
ConfirmationDialog *erase_missing_ask;
ConfirmationDialog *multi_open_ask;
ConfirmationDialog *multi_run_ask;
ConfirmationDialog *multi_scan_ask;
ConfirmationDialog *ask_update_settings;
ConfirmationDialog *open_templates;
EditorAbout *about;
HBoxContainer *settings_hb; 水平
AcceptDialog *run_error_diag;
AcceptDialog *dialog_error;
ProjectDialog *npdialog; 新建项目对话框,导入
OptionButton *language_btn;
LinkButton *version_btn;
2,改变需求
button各态颜色改变
Ref<StyleBoxFlat> sb_minimap = about_btn->get_theme_stylebox(SNAME("normal"))->duplicate(true);
//Ref<StyleBoxFlat> sb_minimap = memnew(StyleBoxFlat);
sb_minimap->set_bg_color(Color(255, 0, 0, 1));
about_btn->add_theme_style_override("normal", sb_minimap);
3,
Camera2D 属性中的 current 要选上摄像机才会启用。
queue_free()是在帧末尾安全销毁节点并将其从树中删除的快捷方式
4,进入编辑器进程相关函数
String path = EditorSettings::get_singleton()->get("projects/" + selected);
String conf = path.plus_file("project.godot");
if (!FileAccess::exists(conf)) {
dialog_error->set_text(vformat(TTR("Can't open project at '%s'."), path));
dialog_error->popup_centered_minsize();
return;
}
print_line("Editing project: " + path + " (" + selected + ")");
List<String> args;
args.push_back("--path");
args.push_back(path);
args.push_back("--editor");
if (OS::get_singleton()->is_stdout_debug_enabled()) {
args.push_back("--debug");
}
if (OS::get_singleton()->is_stdout_verbose()) {
args.push_back("--verbose");
}
if (OS::get_singleton()->is_disable_crash_handler()) {
args.push_back("--disable-crash-handler");
}
String exec = OS::get_singleton()->get_executable_path();
OS::ProcessID pid = 0;
Error err = OS::get_singleton()->execute(exec, args, false, &pid);
OS_Windows::execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id, String *r_pipe, int *r_exitcode, bool read_stderr, Mutex *p_pipe_mutex)