2016-07-12 2 views
1
// 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; 
} 

Вопрос который один является лучшим способом создания в Entity сделаны из PooledEngine?Каков правильный способ создания объекта в libgdx ashley ecs framework?

  • вариант 1, я создаю новый class под названием Gun затем обработать создание компонентов там.
  • вариант 2, Внутри EntityFactoryclass добавить новый метод называется 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(); 
    

ответ

1

Я предпочитаю второй метод через EntityFactory.

Объяснение:

  • В то время как EntityFactory является чистым представлением общего рисунка на заводе, вы пистолет выглядит как builder pattern, но только с одним методом для создания Entity. Поэтому нет смысла использовать новый экземпляр для каждого создания Entity, поскольку вы не сохраняете в нем никакого состояния здания.

  • Ваш Gun класс - это всего лишь обертка для Entity. Но если вы получите Entity от engine.getEntitiesFor(Family..., вы не можете получить его Gun обертка. Поэтому вы не можете использовать его ни в каких системах вашего двигателя.

  • Если ваш EntityFactory становится слишком сложным и длинным, я бы рекомендовал разбить его на GunFactory, BananaFactory и так далее.

+0

Что делать, если я добавил состояния, методы на моем классе оружия? как вы думаете, теперь лучше создать новую обертку? – ronscript

+0

Я отмечу это как ответ, я думаю, что буду использовать шаблон строителя. Благодаря! Это мне очень помогает! – ronscript

Смежные вопросы