Как бы вы вызвали метод из всех экземпляров класса? - PullRequest
6 голосов
/ 18 сентября 2010

Я пишу базовый игровой движок и у меня есть абстрактный класс, представляющий любой объект, который можно нарисовать в трехмерном мире, однако внутри этого класса есть абстрактный метод Render (), который я бы хотел вызывать автоматически на каждом движке этап рисования. Как я могу реализовать это так, чтобы каждый класс, выходящий из моего абстрактного класса, автоматически вызывал Render ()?

Я использую Java, Android SDK 2.2 и OpenGLES.

Ответы [ 3 ]

5 голосов
/ 18 сентября 2010

Вы можете зарегистрировать каждый объект, который может быть отображен в классе, который будет вызывать render () для всех ваших объектов.

Например:

public class Registry{
    private static Collection<RenderedObject> register = new ArrayList<RenderedObject>();

    public static void add(RenderedObject obj){
        register.add(obj);
    }

    public static void renderAll(){
        for(RenderedObject obj : register){
            obj.render();
        }
    }
}

И вы можете зарегистрировать ваши объекты в реестре в конструкторе вашего RenderedObject.

2 голосов
/ 19 сентября 2010

Вы можете сделать Proxy вашего движка:

public class RenderingEngine implements Engine {
    private Engine originalEngine;
    private Collection<AbstractRender3DObject> items;

    public RenderingEngine(Engine originalEngine) {
      // assing
    }
    public void draw() {
         originalEngine.draw();
         invokeRender();
    }

    private void invokeRender() {
       for (AbstractRenderItem item : items) {
           item.render();
       }
    }

    public void register(Object3D item) {
         if (item instanceof AbstractRender3DObject) {
             items.add(item);
         }
         super.register(item);
    }
}

Я не знаю, какую среду вы используете, поэтому я предположил некоторые имена методов и интерфейсов.Но идея та же, что и выше.

0 голосов
/ 18 сентября 2010

Вести список всех объектов, пройтись по нему и вызвать метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...