代码之家  ›  专栏  ›  技术社区  ›  Nick

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

  •  6
  • Nick  · 技术社区  · 16 年前

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

    我使用的是java、androidsdk2.2和opengles。

    3 回复  |  直到 12 年前
        1
  •  5
  •   Bozho    16 年前

    可以将每个可以渲染的对象注册到一个类中,该类将对所有对象调用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();
            }
        }
    }
    

        2
  •  2
  •   Bozho    16 年前

    你可以做一个 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);
        }
    }
    

        3
  •  0
  •   Matti Virkkunen    16 年前

    维护所有对象的列表,在其中循环并调用方法。