2012-09-22 6 views
10

Also versuche ich ein Hintergrundbild für mein Spiel zu erstellen, indem ich Pixmaps in eine Textur zeichne. Bisher kann ich das, aber jetzt muss ich die Pixmaps, die in der X- oder Y-Achse gedreht sind, auf die Textur zeichnen. Jedoch kann ich nichts dazu finden. Die Pixmap-Klasse bietet diese Funktionalität nicht. Dann dachte ich, ich könnte einen geflippten Texturbereich auf eine Textur zeichnen, aber bis jetzt habe ich noch nicht herausgefunden, wie das geht. Also frage ich mich, wie kann ich so etwas tun, wäre es möglich, ein PNG-Bild mit anderen Java-Bibliotheken zu spiegeln und dann eine Pixmap aus dem umgedrehten Bild zu erstellen?Wie kann man eine Pixmap spiegeln, um eine Textur in libgdx zu zeichnen?

Antwort

7

Ich sehe auch nicht andere Option außer die Pixel iterieren:

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

Denken Sie daran, die ursprüngliche Pixmap –

+2

Thx zu entsorgen! Btw, wenn Sie stattdessen auf der Y-Achse spiegeln möchten, tun Sie einfach 'flipped.drawPixel (x, y, src.getPixel (x, Höhe - y - 1));'. – Sawny

+0

Nur für den Fall, dass Sie eine Pixmap um 90 Grad drehen müssen: Ich habe eine Methode erstellt, um dies von Ihrer Idee inspiriert zu tun, siehe http://stackoverflow.com/a/34362685/2399024 – donfuxx

0

Hier ist eine Lösung, die nicht die Schaffung eines neuen Pixmap erfordert. Dieser Code kann auch so geändert werden, dass eine Pixmap horizontal und vertikal gedreht wird, indem die Ecken eines Pixmap-Bilds vertauscht werden, anstatt Pixel auf gegenüberliegenden Seiten des Bildes zu vertauschen.

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); 
}