我一直在使用前端的 Pixi.js 在 JavaScript 中开发一个非常苗条的实体组件系统,我有一个问题要问你们一个常见的模式是你在系统中使用的迭代器,例如在 Unity 中你可以这样做:
[ComponentType1, ComponentType2],
(c1: ComponentType1, c2: ComponentType2) => {
// run ops on the components
})
假设您有一个实体数组和两个包含这些组件类型的数组,需要调用一个函数并将这两个组件作为参数传递,您将如何在后台构建该 forEach 函数?本质上,迭代具有两种类型组件的实体的最优化方法是什么?
简单的方法似乎是迭代实体列表并检查它们的组件类型,但我想知道是否有更好的方法。这种方法看起来像这样:
function forEach<T, K>(components: [c1: T, c2: K], callback: (c1: T, c2: K)=> void) {
entities.forEach((entity) => {
if (entity.hasComponent(c1) && entity.hasComponent(c2)) {
callback(entity.getComponent(c1), entity.getComponent(c2)
}
}