From 5775bc5d7e707d3c2bc48be9ce2191ebbe081e35 Mon Sep 17 00:00:00 2001 From: tzdwindows 7 <3076584115@qq.com> Date: Sat, 25 Oct 2025 17:41:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor(model):=E4=BC=98=E5=8C=96=E7=BD=91?= =?UTF-8?q?=E6=A0=BC=E5=BA=8F=E5=88=97=E5=8C=96=E9=80=BB=E8=BE=91=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B5=8B=E8=AF=95=E6=96=87=E4=BB=B6=E8=B7=AF?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用Set避免重复序列化网格数据 - 在模型加载时自动补充缺失的网格引用 - 更新测试文件路径至统一的testing.model - 移除冗余的部件位置设置代码 --- .../vivid2D/render/model/data/ModelData.java | 20 ++++++++++++++----- .../vivid2D/test/ModelLayerPanelTest.java | 1 + .../vivid2D/test/ModelLoadTest.java | 16 +-------------- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/chuangzhou/vivid2D/render/model/data/ModelData.java b/src/main/java/com/chuangzhou/vivid2D/render/model/data/ModelData.java index cc0aa51..f542cbf 100644 --- a/src/main/java/com/chuangzhou/vivid2D/render/model/data/ModelData.java +++ b/src/main/java/com/chuangzhou/vivid2D/render/model/data/ModelData.java @@ -323,19 +323,23 @@ public class ModelData implements Serializable { private void serializeMeshes(Model2D model) { meshes.clear(); - // 首先序列化模型级别的所有网格 + // 使用Set记录已序列化的网格名称,避免重复 + Set serializedMeshNames = new HashSet<>(); + + // 先序列化模型级别的网格 for (Mesh2D mesh : model.getMeshes()) { - if (!meshExists(mesh.getName())) { + if (!serializedMeshNames.contains(mesh.getName())) { meshes.add(new MeshData(mesh)); + serializedMeshNames.add(mesh.getName()); } } - // 然后序列化所有部件中的网格 + // 再序列化部件中的网格(去重) for (ModelPart part : model.getParts()) { for (Mesh2D mesh : part.getMeshes()) { - // 检查是否已经序列化过(避免重复) - if (!meshExists(mesh.getName())) { + if (!serializedMeshNames.contains(mesh.getName())) { meshes.add(new MeshData(mesh)); + serializedMeshNames.add(mesh.getName()); } } } @@ -502,6 +506,12 @@ public class ModelData implements Serializable { for (PartData partData : parts) { ModelPart part = partData.toModelPart(meshMap); partMap.put(part.getName(), part); + + for (Mesh2D mesh : part.getMeshes()) { + if (!model.getMeshes().contains(mesh)) { + model.addMesh(mesh); + } + } } // 2. 建立父子关系 diff --git a/src/main/java/com/chuangzhou/vivid2D/test/ModelLayerPanelTest.java b/src/main/java/com/chuangzhou/vivid2D/test/ModelLayerPanelTest.java index fc8837d..119b24a 100644 --- a/src/main/java/com/chuangzhou/vivid2D/test/ModelLayerPanelTest.java +++ b/src/main/java/com/chuangzhou/vivid2D/test/ModelLayerPanelTest.java @@ -142,6 +142,7 @@ public class ModelLayerPanelTest { renderPanel.dispose(); } catch (Throwable ignored) { } + model.saveToFile("C:\\Users\\Administrator\\Desktop\\testing.model"); System.exit(0); } }); diff --git a/src/main/java/com/chuangzhou/vivid2D/test/ModelLoadTest.java b/src/main/java/com/chuangzhou/vivid2D/test/ModelLoadTest.java index f406441..f58ce27 100644 --- a/src/main/java/com/chuangzhou/vivid2D/test/ModelLoadTest.java +++ b/src/main/java/com/chuangzhou/vivid2D/test/ModelLoadTest.java @@ -36,7 +36,7 @@ public class ModelLoadTest { private boolean enableWireframe = false; // 要加载的 model 文件路径(请根据实际保存位置修改) - private static final String MODEL_PATH = "C:\\Users\\Administrator\\Desktop\\trump_texture.model"; + private static final String MODEL_PATH = "C:\\Users\\Administrator\\Desktop\\testing.model"; public static void main(String[] args) { new ModelLoadTest().run(); @@ -318,20 +318,6 @@ public class ModelLoadTest { } catch (Throwable ignored) { } } - - // 如果 parts 不为空,尝试把第一个 part 放到窗口中心(如果有 setPosition) - if (!parts.isEmpty()) { - Object first = parts.get(0); - try { - Method setPosition = tryGetMethod(first.getClass(), "setPosition", float.class, float.class); - if (setPosition != null) { - setPosition.invoke(first, (float) WINDOW_WIDTH / 2f, (float) WINDOW_HEIGHT / 2f); - System.out.println("Moved first part to window center."); - } - } catch (Throwable t) { - // ignore - } - } } }