gpt4 book ai didi

java - 在 libgdx ashley ecs 框架池引擎中创建实体的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 10:41:56 34 4
gpt4 key购买 nike

// GameWorld
PooledEngine engine = new PooledEngine();

// Gun class
class Gun {
publc Gun(Entity entity) {
createComponents();
addComponents();
}

public Entity getEntity();
}

// Option 1
Gun gun = new Gun(engine.createEntity());
engine.addEntity(gun.getEntity());

// Option 2 or a simple method inside EntityFactory class
public Entity createGun() {
Entity gun = engine.createEntity();
// components creation here
..
engine.addEntity(gun);
return gun;
}

问题创建PooledEngineEntity 的更好方法是什么?

  • 选项 1,我创建一个名为 Gun 的新,然后在那里处理组件的创建。
  • 选项 2,在 EntityFactory class 中添加名为 createGun() 的新方法

    class EntityFactory {
    // constructor
    public void build() {
    // Option 1
    Gun gun = new Gun(engine.createEntity());
    // where I can call gun.fire(), gun.reload(), gun.dispose, and so on..
    engine.addEntity(gun.getEntity());


    // Option 2
    Entity gun = createGun();
    engine.addEntity(gun);
    }

    public Entity createGun() {
    Entity gun = engine.createEntity();
    // components creation here
    ...
    engine.addEntity(gun);
    return gun;
    }
    }

    EntityFactory factory = new EntityFactory(world, engine);
    factory.build();

最佳答案

我更喜欢通过 EntityFactory 的第二种方法。

解释:

  • 虽然 EntityFactory 是常见工厂模式的干净表示,但你的 Gun 看起来像一个 builder pattern但只有一种创建实体的方法。因此,为每个 Entity 创建使用一个新实例是没有意义的,因为您没有在实例中存储构建状态。

  • 您的 Gun 类只是 Entity 的包装器。但是如果你从 engine.getEntitiesFor(Family... 得到一个 Entity 你不能得到它的 Gun 包装器。所以你不能真正将它用于引擎系统中的任何内容。

  • 如果您的 EntityFactory 变得太复杂和冗长,我建议将其拆分为 GunFactoryBananaFactory 等上。

关于java - 在 libgdx ashley ecs 框架池引擎中创建实体的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38324467/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com