编辑器交互/数据 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:
tianmo committed 2026-10-16 14:38:25 +08:00
1 parent 2b23ce59db
commit 7fbb042aa6
6 files changed
+990 -126

No files matched your search

+27
View File
@@ -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");