我目前正在用Java创建一个用于Android的2D游戏引擎。该引擎基本上是一个实体组件系统。您首先创建一个蓝图(ID的包装器),您可以将组件类型与其关联。您可以稍后“构建”蓝图。这意味着初始化与蓝图关联的每个类型的对象并将其放入更新循环中。返回一个实体(也是一个int id的包装器),您可以使用该实体访问组件。
添加组件时没有初始化对象,这意味着我当时无法提供构造函数,这就是我想以某种方式解决的问题。
这是我目前将组件类型与蓝图相关联的方式:
public <T extends Component> void addComponent(BluePrint bluePrint, Class<T> type) {
bluePrintMap.get(bluePrint.getId()).add(type);
}
我想返回一个方法引用,或者只是将构造函数参数作为参数提供给addComponent并存储它们供以后使用。我不知道如何处理这个问题,因为我甚至不知道构造函数参数的长度。任何输入都是适应的。
编辑: 一种可能的解决方案是实际创建组件的实例,然后在用户决定构建蓝图时创建副本,但这会给我带来一些其他问题。
答案 0 :(得分:0)
最后我选择了我在编辑中提供的解决方案,到目前为止似乎工作得非常好,而且我也得到了类型安全性很好。缺点是 如果我想在创建脚本组件时让用户更容易,我认为引擎必须使用序列化执行副本,这种类型很慢。