你会如何从类的所有实例中调用方法?

时间:2010-09-18 18:54:19

标签: java android opengl-es

我正在编写一个基本的游戏引擎并且有一个抽象类来表示可以在3D世界中绘制的任何对象,但是在这个类中是一个抽象方法Render(),我希望每个引擎都自动调用它绘制阶段。我如何实现这一点,以便从我的抽象类扩展的每个类都将自动具有名为?

的Render()

我使用的是java,android sdk 2.2和opengl es。

3 个答案:

答案 0 :(得分:5)

您可以将每个可以渲染的对象注册到将在所有对象上调用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的构造函数中将对象注册到注册表中。

答案 1 :(得分:2)

您可以制作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);
    }
}

我不知道你正在使用的框架,所以我假设了一些方法和接口名称。但这个想法如上所述。

答案 2 :(得分:0)

维护所有对象的列表,循环遍历并调用方法。