You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FXGL加载TMX地图报No EntityFactory has a method annotated @Spawns()问题求助

FXGL加载TMX文件报错排查方案
  • 第一步:处理Tiled版本兼容问题
    报错明确提示当前TMX由Tiled 1.7.2生成,FXGL当前支持的最高版本为1.2.3,高版本新增的属性会导致解析异常。请卸载现有Tiled,安装1.2.3版本后重新导出TMX文件,导出时选择未压缩的XML格式,不要开启任何压缩选项。
  • 第二步:补全实体工厂的必要注解
    FXGL要求自定义的实体工厂类必须添加类级别的@EntityFactory注解,才能正确扫描到方法上的@Spawns注解。你当前的SimpleEntityFactory类缺少该注解,是触发报错的核心原因。
    修正后的实体工厂代码如下:
    import com.almasb.fxgl.entity.Entity;
    import com.almasb.fxgl.entity.EntityFactory;
    import com.almasb.fxgl.entity.SpawnData;
    import com.almasb.fxgl.entity.Spawns;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.Circle;
    import static com.almasb.fxgl.dsl.FXGL.entityBuilder;
    
    @EntityFactory
    public class SimpleEntityFactory implements EntityFactory {
    
          @Spawns("tree")
          public Entity newTree(SpawnData data) {
             return entityBuilder(data)
                     .view(new Circle(8, Color.BLUE))
                     .build();
          }
    }
    
  • 第三步:调整实体工厂的注册时机
    实体工厂必须在加载TMX地图之前完成注册,建议将注册逻辑从initGameVars迁移到initGame方法的最开头,确保执行顺序正确:
    @Override
    protected void initGame() {
        FXGL.getGameWorld().addEntityFactory(new SimpleEntityFactory());
        FXGL.setLevelFromMap("level01.tmx");
    }
    
    // 原initGameVars中的注册代码可以直接删除
    
  • 第四步:检查配置一致性
    • 确认TMX文件中object的name属性值和@Spawns注解中的值完全一致,无大小写差异、多余空格
    • 确认TMX文件放置在项目的assets/levels目录下,路径拼写完全匹配
  • 第五步:定位问题范围
    可以临时删除TMX中的对象层(objectgroup),尝试仅加载瓦片层,如果能正常加载即可确认问题出在实体工厂相关配置,和瓦片层无关。

内容的提问来源于stack exchange,提问作者Arquillian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:48:04