在管道通信基礎上,可進行宿主程序與Godot的雙向通信。
先拿屬性信息試試手。
DrGraph端
static UnicodeString command = "Book.position";
if (InputQuery("輸入窗口", "請輸入待獲取的屬性信息", command)) {
TDrStream_Get drGet(THelper::String::GetStringAt(command, L".", 0).Trim(),
THelper::String::GetStringAt(command, L".", 1).Trim());
TDllStream ds;
ds << drGet;
PipeStreamServer->WritePipe(ds, 1000);
}
Godot端(源碼完善)
List<PropertyInfo> *p_list = new List<PropertyInfo>;
bool p_reversed = true;
destObject->get_property_list(p_list, p_reversed);
cofs << "OK";
for (List<PropertyInfo>::Iterator it = p_list->begin(); it != p_list->end(); ++it) {
String content = it->name.ptr();
if (it->class_name.operator String().is_empty() == false)
content += str_format(U"[%s]", it->class_name.operator String().utf8().get_data());
Variant value = destObject->get(it->name);
content += str_format(U" = %s", value.operator String().utf8().get_data());
cofs << content;
}
delete p_list;
運行結(jié)果
132. 13:20:29:829 > 【主線程】 > [Pipe.發(fā)送] > 發(fā)送數(shù)據(jù)中內(nèi)容[DrGraph.28: Request - wait 1000 ms]:
[int]類型 > 值 = 2
[UnicodeString]類型 > 值 = root
[UnicodeString]類型 > 值 = propertyNames
133. 13:20:30:015 > 【主線程】 > [Pipe.Read] > 發(fā)送數(shù)據(jù)[DrGraph.28: Request - wait 1000 ms]成功返回 1837 字節(jié)... > PIPE響應中內(nèi)容[godot -> DrGraph.28: Response - no return]:
[int]類型 > 值 = 3
[UnicodeString]類型 > 值 = OK
[UnicodeString]類型 > 值 = book.gd = <null>
[UnicodeString]類型 > 值 = singlePage = false
[UnicodeString]類型 > 值 = middleBarWidth = 0
[UnicodeString]類型 > 值 = shader_rect[ColorRect] = ShaderRect:<ColorRect#26944209673>
[UnicodeString]類型 > 值 = currentPageMode = false
[UnicodeString]類型 > 值 = currentAreaType = -2
[UnicodeString]類型 > 值 = triggleAreaMoment = 484887
[UnicodeString]類型 > 值 = currentPageIndex = 30
[UnicodeString]類型 > 值 = pageCount = 100
[UnicodeString]類型 > 值 = pageImgPath = res://Pages/
[UnicodeString]類型 > 值 = leftMouseDownMoment = 0
[UnicodeString]類型 > 值 = underAutoTurnPage = false
[UnicodeString]類型 > 值 = leftMouseDownPos = (0, 0)
[UnicodeString]類型 > 值 = dllStream[DllStream] = <DllStream#67024979098>
[UnicodeString]類型 > 值 = AutoTurnObject = <RefCounted#-9223372009692462322>
[UnicodeString]類型 > 值 = Node2D = <null>
[UnicodeString]類型 > 值 = Transform = <null>
[UnicodeString]類型 > 值 = position = (0, 0)
[UnicodeString]類型 > 值 = rotation = 0
[UnicodeString]類型 > 值 = rotation_degrees = 0
[UnicodeString]類型 > 值 = scale = (1, 1)
[UnicodeString]類型 > 值 = skew = 0
[UnicodeString]類型 > 值 = transform = [X: (1, 0), Y: (0, 1), O: (0, 0)]
[UnicodeString]類型 > 值 = global_position = (0, 0)
[UnicodeString]類型 > 值 = global_rotation = 0
[UnicodeString]類型 > 值 = global_rotation_degrees = 0
[UnicodeString]類型 > 值 = global_scale = (1, 1)
[UnicodeString]類型 > 值 = global_skew = 0
[UnicodeString]類型 > 值 = global_transform = [X: (1, 0), Y: (0, 1), O: (0, 0)]
[UnicodeString]類型 > 值 = CanvasItem = <null>
[UnicodeString]類型 > 值 = Visibility = <null>
[UnicodeString]類型 > 值 = visible = true
[UnicodeString]類型 > 值 = modulate = (1, 1, 1, 1)
[UnicodeString]類型 > 值 = self_modulate = (1, 1, 1, 1)
[UnicodeString]類型 > 值 = show_behind_parent = false
[UnicodeString]類型 > 值 = top_level = false
[UnicodeString]類型 > 值 = clip_children = 0
[UnicodeString]類型 > 值 = light_mask = 1
[UnicodeString]類型 > 值 = visibility_layer = 1
[UnicodeString]類型 > 值 = Ordering = <null>
[UnicodeString]類型 > 值 = z_index = 0
[UnicodeString]類型 > 值 = z_as_relative = true
[UnicodeString]類型 > 值 = y_sort_enabled = false
[UnicodeString]類型 > 值 = Texture = <null>
[UnicodeString]類型 > 值 = texture_filter = 0
[UnicodeString]類型 > 值 = texture_repeat = 0
[UnicodeString]類型 > 值 = Material = <null>
[UnicodeString]類型 > 值 = material[CanvasItemMaterial,ShaderMaterial] = <Object#null>
[UnicodeString]類型 > 值 = use_parent_material = false
[UnicodeString]類型 > 值 = Node = <null>
[UnicodeString]類型 > 值 = _import_path =
[UnicodeString]類型 > 值 = name = Book
[UnicodeString]類型 > 值 = unique_name_in_owner = false
[UnicodeString]類型 > 值 = scene_file_path = res://book.tscn
[UnicodeString]類型 > 值 = owner[Node] = <Object#null>
[UnicodeString]類型 > 值 = multiplayer[MultiplayerAPI] = <SceneMultiplayer#-9223372011168857310>
[UnicodeString]類型 > 值 = Process = <null>
[UnicodeString]類型 > 值 = process_mode = 0
[UnicodeString]類型 > 值 = process_priority = 0
[UnicodeString]類型 > 值 = Editor Description = <null>
[UnicodeString]類型 > 值 = editor_description =
[UnicodeString]類型 > 值 = script[Script] = <GDScript#-9223372010984307965>
文章來源:http://www.zghlxwxcb.cn/news/detail-603665.html
?這已具備RTTI的雛形。?文章來源地址http://www.zghlxwxcb.cn/news/detail-603665.html
到了這里,關(guān)于Godot 4 源碼分析 - 獲取屬性信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!