2010-09-18 12 views
5

मैं एक मूल गेम इंजन लिख रहा हूं और एक अमूर्त वर्ग है जो किसी भी वस्तु का प्रतिनिधित्व करता है जिसे 3 डी दुनिया में खींचा जा सकता है, हालांकि इस वर्ग के अंदर एक सार विधि रेंडर() है जिसे मैं प्रत्येक ड्रॉ पर इंजन द्वारा स्वचालित रूप से कॉल करना चाहता हूं अवस्था। मैं इसे कैसे कार्यान्वित कर सकता हूं ताकि मेरी अमूर्त कक्षा से विस्तारित प्रत्येक वर्ग में स्वचालित रूप से रेंडर() कहा जा सके?आप कक्षा के सभी उदाहरणों से विधि कैसे कॉल करेंगे?

मैं जावा, एंड्रॉइड एसडीके 2.2, और ओपनग्ल es का उपयोग कर रहा हूं।

उत्तर

3

आप प्रत्येक ऑब्जेक्ट को पंजीकृत कर सकते हैं जिसे कक्षा में प्रस्तुत किया जा सकता है जो आपके सभी ऑब्जेक्ट्स पर रेंडर() को कॉल करेगा।

उदाहरण के लिए:

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 के निर्माता के भीतर रजिस्ट्री में अपने वस्तुओं रजिस्टर कर सकते हैं।

+3

स्थैतिक चर एक एंड्रॉइड पर उपयोग करने के लिए * बहुत बुरा विचार * है। – aioobe

+0

मुझे पर्यवेक्षक पैटर्न का थोड़ा सा याद दिलाता है। – helpermethod

+0

@aioobe, आप स्थिर वातावरण के बिना एक ही काम कर सकते हैं। @ हेल्पर विधि, यह वैसे ही काम करता है। –

0

सभी वस्तुओं की एक सूची बनाए रखें, इसके माध्यम से लूप रखें और विधि को कॉल करें।

1

आप अपने इंजन की एक 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

ध्यान दें कि जावा में अंक से शुरू होने वाले पहचानकर्ता जावा में अवैध हैं। – BalusC

+0

हां, ज़ाहिर है। धन्यवाद :) – Bozho

संबंधित मुद्दे