2012-09-22 31 views
10

Vì vậy, những gì tôi đang cố gắng làm là tạo ra một hình nền cho trò chơi của tôi bằng cách vẽ các hình thu nhỏ cho một kết cấu. Cho đến nay tôi có thể làm điều đó, nhưng bây giờ tôi cần phải vẽ các pixmaps lộn xộn trong trục X hoặc Y để kết cấu. Tuy nhiên tôi không thể tìm thấy bất cứ điều gì để làm như vậy. Lớp pixmap không cung cấp chức năng đó. Sau đó, tôi nghĩ rằng tôi có thể vẽ một khu vực kết cấu lật đến một kết cấu, nhưng cho đến nay tôi đã không tìm thấy làm thế nào để làm như vậy. Vì vậy, tôi đã tự hỏi làm thế nào tôi có thể làm một điều như vậy, nó sẽ có thể lật một hình ảnh png với các thư viện java khác và sau đó tạo ra một pixmap từ đó lật hình ảnh?làm thế nào để lật một pixmap để vẽ một kết cấu trong libgdx?

Trả lời

7

Tôi cũng không thấy tùy chọn khác ngoài việc lặp các điểm ảnh:

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

Nhớ vứt bỏ Pixmap gốc –

+2

Thx! Btw, nếu bạn muốn lật trên trục Y thay vì bạn chỉ cần thực hiện 'flipped.drawPixel (x, y, src.getPixel (x, height - y - 1));'. – Sawny

+0

Chỉ trong trường hợp bạn cần xoay một bản đồ pixmap 90 độ: Tôi đã tạo ra một phương pháp để làm điều này lấy cảm hứng từ ý tưởng của bạn, xem http://stackoverflow.com/a/34362685/2399024 – donfuxx

0

Dưới đây là một giải pháp mà không đòi hỏi sự sáng tạo của một pixmap mới. Mã này cũng có thể được sửa đổi để lật Pixmap theo chiều ngang và theo chiều dọc bằng cách hoán đổi các góc của hình ảnh pixmap thay vì đổi pixel ở các cạnh đối diện của hình ảnh.

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); 
} 
Các vấn đề liên quan