我正在编写一个基本的游戏引擎并且有一个抽象类来表示可以在3D世界中绘制的任何对象,但是在这个类中是一个抽象方法Render(),我希望每个引擎都自动调用它绘制阶段。我如何实现这一点,以便从我的抽象类扩展的每个类都将自动具有名为?
的Render()我使用的是java,android sdk 2.2和opengl es。
答案 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)
维护所有对象的列表,循环遍历并调用方法。