编辑器交互/数据 API 调研完成:解出 KP=SelectBox、选中链路、增删改真实落点与撤销栈
- 新工具 tools/decrypt/DumpSites.java:逐 indy 站点解出『类.方法 + 描述符』(带描述符, 解决 rewrite_source.py 丢描述符导致的重载混淆);ResolveSites.java 走运行时 CallSite 交叉验证。 - 结论改正:KP = libGDX SelectBox,KP.B(String)V = setSelected;XW/acW/acK/Yr 是 『属性面板控件』而不是场景数据;场景对象是树节点上的 GP/Gp/GU/GO。 - 补齐:当前选择怎么设(VZ.D(Object))、谁刷新界面(VZ.D(GP,ZZ) / rW.B / fC.C)、 撤销栈(载荷类 un 的 D()/B() 成对包一层)、删除边界(root 的删除按钮本来就是 disabled)、 查/选/改名/删除/导出的真实实现与出处。 - 新增运行时探针 -Dspine.probe=objects(SceneObjects.java),实测打印整棵场景对象树。 - 文档:编辑器交互与数据API.md 重写;混淆名对照表.md 增补类/方法对照与大小写同名类坑。
This commit is contained in:
1 parent
2b23ce59db
commit
7fbb042aa6
6 files changed
+990
-126
No files matched your search
@@ -128,6 +128,33 @@ public final class Launcher {
|
||||
final ClassLoader commandLoader = viewLoader;
|
||||
for (int i = 0; i < 200; i++) {
|
||||
if (ViewInstaller.installForLoader(viewLoader)) {
|
||||
// 验证用:-Dspine.probe=objects 会在界面稳定后把"树里的场景对象"整份打到日志里。
|
||||
final String probe = System.getProperty("spine.probe");
|
||||
if (probe != null) {
|
||||
Thread prober = new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Thread.sleep(6000);
|
||||
} catch (InterruptedException ignored) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
System.err.println("[probe] ==== " + probe + " ====");
|
||||
if ("objects".equals(probe)) {
|
||||
System.err.println(SceneObjects.describe(viewLoader));
|
||||
} else {
|
||||
System.err.println("[probe] 未知探针: " + probe);
|
||||
}
|
||||
} catch (Throwable error) {
|
||||
System.err.println("[probe] 失败: " + error);
|
||||
error.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
}, "spineview-probe");
|
||||
prober.setDaemon(true);
|
||||
prober.start();
|
||||
}
|
||||
// 验证用:-Dspine.runCommand="New Bone" 会在界面稳定后执行这条编辑器命令
|
||||
// (名字取自 hotkeys.txt / 菜单项,链路见 Commands)。
|
||||
final String command = System.getProperty("spine.runCommand");
|
||||
|
||||
Reference in new issue
Block a user