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 - } - } } }