2012-09-22 10 views
10

तो मैं जो कर रहा हूं वह एक बनावट में पिक्समैप्स ड्राइंग करके मेरे गेम के लिए पृष्ठभूमि छवि उत्पन्न करना है। अब तक मैं ऐसा कर सकता हूं, लेकिन अब मुझे एक्स या वाई धुरी में बनावट में फिसलने वाले पिक्समैप्स को खींचने की ज़रूरत है। हालांकि मुझे ऐसा करने के लिए कुछ भी नहीं मिला। पिक्समैप वर्ग उस कार्यक्षमता प्रदान नहीं करता है। तब मैंने सोचा कि मैं एक बनावट बनावट क्षेत्र को एक बनावट में खींच सकता हूं, लेकिन अब तक मुझे यह नहीं मिला है कि ऐसा कैसे किया जाए। तो मैं सोच रहा था कि मैं ऐसी चीज कैसे कर सकता हूं, क्या अन्य जावा पुस्तकालयों के साथ एक पीएनजी छवि फ्लिप करना संभव होगा और फिर उस फ़्लिप की गई छवि से पिक्समैप बनाएं?libgdx में एक बनावट को आकर्षित करने के लिए पिक्समैप कैसे फ़्लिप करें?

उत्तर

7

मैं भी अन्य विकल्प दिखाई नहीं देता छोड़कर पिक्सल पुनरावृत्ति करने के लिए:

public Pixmap flipPixmap(Pixmap src) { 
    final int width = src.getWidth(); 
    final int height = src.getHeight(); 
    Pixmap flipped = new Pixmap(width, height, src.getFormat()); 

    for (int x = 0; x < width; x++) { 
     for (int y = 0; y < height; y++) { 
      flipped.drawPixel(x, y, src.getPixel(width - x - 1, y)); 
     } 
    } 
    return flipped; 
} 
+0

मूल पिक्समैप –

+2

Thx का निपटान करना याद रखें! बीटीडब्ल्यू, यदि आप वाई अक्ष पर फ़्लिप करना चाहते हैं तो आप बस 'flipped.drawPixel (x, y, src.getPixel (x, height - y - 1)); '। – Sawny

+0

बस अगर आपको 90 डिग्री तक पिक्समैप घुमाने की आवश्यकता है: मैंने आपके विचार से प्रेरित करने के लिए एक विधि बनाई है, http://stackoverflow.com/a/34362685/2399024 देखें – donfuxx

0

यहाँ एक समाधान है कि एक नए पिक्समैप के सृजन की आवश्यकता नहीं है। इस कोड को चित्र के विपरीत किनारों पर पिक्सल को स्वैप करने के बजाय पिक्समैप छवि के कोनों को स्वैप करके क्षैतिज और लंबवत पिक्समैप को फ़्लिप करने के लिए भी संशोधित किया जा सकता है।

public static void flipPixmap(Pixmap p){ 
    int w = p.getWidth(); 
    int h = p.getHeight(); 
    int hold; 

    //change blending to 'none' so that alpha areas will not show 
     //previous orientation of image 
    p.setBlending(Pixmap.Blending.None); 
    for (int y = 0; y < h/2; y++) { 
     for (int x = 0; x < w/2; x++) { 
      //get color of current pixel 
      hold = p.getPixel(x,y); 
      //draw color of pixel from opposite side of pixmap to current position 
      p.drawPixel(x,y, p.getPixel(w-x-1, y)); 
      //draw saved color to other side of pixmap 
      p.drawPixel(w-x-1,y, hold); 
      //repeat for height/width inverted pixels 
      hold = p.getPixel(x, h-y-1); 
      p.drawPixel(x,h-y-1, p.getPixel(w-x-1,h-y-1)); 
      p.drawPixel(w-x-1,h-y-1, hold); 
     } 
    } 
    //set blending back to default 
    p.setBlending(Pixmap.Blending.SourceOver); 
} 
संबंधित मुद्दे