Funkcja zwracająca teksturę z jednym białym pixelem wygląda następująco:
public Texture getWhitePixel(){
Pixmap
textureSource; //Pixmapa z której budujemy Gdx2DPixmap
Gdx2DPixmap
pixmap; //Pixmapa
Gdx`a najniższy poziom pixmapy
pixmap
= new Gdx2DPixmap(1, 1,
Gdx2DPixmap.GDX2D_FORMAT_RGBA8888);
textureSource = new Pixmap(pixmap);
textureSource.drawPixel(0,
0, Color.rgba8888(Color.WHITE));
return new
Texture(textureSource);
}
W powyższej funkcji użyliśmy 2 klas Pixmapy(być może ten sam efekt można było uzyskać pomijając Gdx2DPixmap - ale przedstawiam metodę sprawdzoną). Najpierw tworzymy Gdx2DPixmap o rozmiarze 1 X 1, w formacie RGBA8888. Tutaj odnośnie formatów: występuje ich kilka a każda z nich ma przypisaną konkretną wartość typu int:
public static final int GDX2D_FORMAT_ALPHA = 1; public static final int GDX2D_FORMAT_LUMINANCE_ALPHA = 2; public static final int GDX2D_FORMAT_RGB888 = 3; public static final int GDX2D_FORMAT_RGBA8888 = 4; public static final int GDX2D_FORMAT_RGB565 = 5; public static final int GDX2D_FORMAT_RGBA4444 = 6;Ja wybrałem RGBA8888 czyli 4, ponieważ każdy kolor jest zapisany w 8 bitach, wspiera także kanał alpha i ten prawdopodobnie może nam się najczęściej przydawać. Choć jako że chcemy tylko jeden mały pixel i to bez kanału alpha to ze spokojem moglibyśmy wybrać format RGB565 czy inny zajmujący teoretycznie mniej miejsca w pamięci. Nie mniej kanał 8888 jest tym podstawowym i sprawia najmniej problemów.
Następnie tworzymy obiekt typu Pixmap z obiektu typu Gdx2DPixmap, na którym to rysujemy Pixel w pozycji 0,0 i o kolorze który wybraliśmy czyli: Color.rgba8888(Color.WHITE).
Na odpowiedni format przekształcamy go dzięki odpowiedniej funkcji statycznej klasy Color.
UWAGA: Zamiast korzystać z już gotowych kolorów w klasie Color, możemy sami wpisać pożądane przez nas parametry w formacie RGBA(czerwony, zielony, niebieski, alpha) np:
textureSource.drawPixel(0, 0, Color.rgba8888(1,1,1,0));
Oczywiście sam obiekt pixmap umożliwia także rysowanie na nim gotowych wzorów jak kół, kwadratów czy liń. I w ten sposób programowo możemy tworzyć własne tekstury.
Poniżej przykład jak zrobić Texture o dowolnym wymiarze i obramowaniem:
/**
* Funkcja ta zwraca teksture
z namalowanym kwadratem z ramką
* @param x
* @param y
* @param width
* @param height
* @param sizeFrame szerokość w pixelach
ramki
* @param
colorBackground kolor tła
* @param colorFrame kolor ramki
* @return
*/
public static Texture GetRectangleWithFrame(int x, int y, int width, int height, int sizeFrame, Color
colorBackground, Color colorFrame){
Pixmap textureSource;
Gdx2DPixmap pixmap;
pixmap = new Gdx2DPixmap(width,
height, Gdx2DPixmap.GDX2D_FORMAT_RGBA8888);
textureSource = new Pixmap(pixmap);
//Wypełnianie tekstury
for(int pixelX = 0; pixelX
< width; pixelX++){
for(int pixelY = 0; pixelY
< height; pixelY++){
if(pixelY <
sizeFrame || pixelY > (height - 1) - sizeFrame || pixelX < sizeFrame
|| pixelX > (width - 1) - sizeFrame)
{
textureSource.drawPixel(pixelX,
pixelY, Color.rgba8888(colorFrame));
} else{
textureSource.drawPixel(pixelX,
pixelY, Color.rgba8888(colorBackground));
}
}
}
return new
Texture(textureSource);
}
Mamy tutaj podobny przykład jak na początku utworzenie obiektu Pixmap i Gdx2DPixmap, a następnie wstępne ich skonfigurowanie(szerokosc , wysokość, format). Cały problem polega jedynie na umiejętnym używaniu funkcji textureSource.drawPixel(). Gdzie musimy podać pozycje pixela licząc od 0, jak w przypadku tablicy a także podać interesujący nas kolor.