2013-02-10 8 views
5

मैं नेटवर्क पर चित्र डाउनलोड करने कर रहा हूँ और उन्हें अपने libgdx यूआई में जोड़ने के रूप में छवि अभिनेताओं इस का उपयोग करते हुए:ओपन संदर्भ नुकसान के बाद अप्रबंधित बनावट libgdx को फिर से लोड करने के लिए कैसे

Pixmap pm = new Pixmap(data, 0, data.length); 
Texture t = new Texture(pm); 
TextureRegion tr = new TextureRegion(t,200,300); 
TextureRegionDrawable trd = new TextureRegionDrawable(tr); 
Image icon = new Image(); 
icon.setDrawable(trd); 

को देखते हुए यह मैं फिर से लोड करने की किसी तरह की जरूरत है ओपनजीएल संदर्भ खो जाने पर बनावट डेटा खो जाता है (उदाहरण के लिए क्योंकि स्क्रीन सो जाती है)।

मैं अपने खुद के प्रबंधक वर्ग बनाने की कोशिश की है, जोड़ने

DynamicTextureManager.register(t, pm); // Register texture together with the source pixmap 
ऊपर टुकड़ा करने के लिए

, और resume() में मुझे क्या करना:

DynamicTextureManager.reload(); 

प्रबंधक वर्ग:

public class DynamicTextureManager { 
    private static LinkedHashMap<Texture, Pixmap> theMap = new 
     LinkedHashMap<Texture,Pixmap>(); 
    public static void reload() { 
     Set<Entry<Texture,Pixmap>> es = theMap.entrySet(); 
     for(Entry<Texture,Pixmap> e : es) { 
      Texture t = e.getKey(); 
      Pixmap p = e.getValue(); 

      t.draw(p, 0, 0); 
     } 
    } 

    public static void register(Texture t, Pixmap p) { 
     theMap.put(t, p); 
    } 
} 

लेकिन इससे मदद नहीं मिलती है - मैं अभी भी बनावट के बजाय अनलोड और सफेद क्षेत्रों के बनावट के साथ समाप्त होता हूं। दाना।

यह कैसे किया जाना चाहिए? मैं इसे प्रदर्शित करने वाला कोई भी कोड नहीं ढूंढ पा रहा हूं!

+0

मेरा अनुमान है कि 'बनावट' अंतर्निहित बनावट संभाल को _magically_ पुन: उत्पन्न नहीं करता है। 'बनावट' को दोबारा बनाने का प्रयास करें, या तथाकथित _managed_ बनावट डेटा पर स्विच करें ('TextureData' के उप-वर्गों की जांच करें;' पिक्समैपटेक्चरडाटा 'इस धारणा का समर्थन नहीं करता है। –

+0

मेरे पास एक ऐसा कार्य है जो इस तरह के समान है। इसे अभी तक किया है, लेकिन अगर मुझे यह काम मिल रहा है (जो मुझे लगता है कि बाइनरी डेटा से पिक्समैप का पुनर्निर्माण करना शामिल है) मैं इसे उत्तर के साथ अपडेट कर दूंगा। – Jyro117

+0

@ Jyro117 मैंने अपना वर्तमान समाधान उत्तर के रूप में जोड़ा, सुधारने में संकोच न करें! – johlo

उत्तर

1

संदर्भ के रूप में मेरा समाधान जोड़ना। अब मैं अपने ऑब्जेक्ट के साथ छवि ऑब्जेक्ट और पिक्समैप ऑब्जेक्ट को पुनः लोड() पर पंजीकृत करता हूं, बनावट को पिक्समैप से फिर से बनाया गया है और मैंने पुरानी छवि के लिए नया बनावट सेट किया है। मेरे लिए काम करता है, लेकिन अधिक सुरुचिपूर्ण समाधान स्वागत है।

import java.util.Map.Entry; 
public class DynamicTextureManager { 
    private static final class MapData { 
     Pixmap pixmap; 
     int width; 
     int height; 
    } 

    private static WeakHashMap<Image, MapData> theMap = new WeakHashMap<Image, MapData>(); 

    public static void reload() { 
     Set<Entry<Image, MapData>> es = theMap.entrySet(); 
     for (Entry<Image, MapData> e : es) { 
      Image i = e.getKey(); 
      MapData d = e.getValue(); 

      Texture t = new Texture(d.pixmap); 
      TextureRegion tr; 
      if(d.width == -1 || d.height == -1) { 
       tr = new TextureRegion(t); 
      } 
      else { 
       tr = new TextureRegion(t,d.width, d.height);     
      } 
      TextureRegionDrawable trd = new TextureRegionDrawable(tr); 
      i.setDrawable(trd); 
     } 
    } 

    public static void register(Image i, Pixmap p) { 
     MapData d = new MapData(); 
     d.pixmap = p; 
     d.width = -1; 
     d.height = -1; 
     theMap.put(i, d); 
    } 

    public static void register(Image i, Pixmap p, int width, int height) { 
     MapData d = new MapData(); 
     d.pixmap = p; 
     d.width = width; 
     d.height = height; 

     theMap.put(i, d); 
    } 

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