2014-07-15 14 views
10

Próbuję obrócić tekstury, gdy je rysuję. Pomyślałem, że byłoby to bardziej sensowne niż obracanie obrazów o 90 stopni w paint.net i zapisanie ich w różnych plikach. Rozejrzałem się za dokumentacją API dla argumentów rysowania spritebatch, ale po prostu nie rozumiem. Istnieje wiele argumentów, takich jak srcX, srcY, originX i tak dalej. Również chciałbym wiedzieć, jak zrobić to samo dla regionów tekstury. Oto link do strony dokumentacji api: http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/SpriteBatch.htmllibgdx: Obracanie tekstury podczas rysowania za pomocą spritebatch

Dziękujemy!

Odpowiedz

51

ponownie from the documentation, ale skopiowane tutaj dla łatwości użytkowania, a więc mogę wyjaśnić trochę lepiej.

x - the x-coordinate in screen space 
y - the y-coordinate in screen space 

Te dwie wartości reprezentują lokalizację, w której można narysować teksturę w obszarze ekranu (obszarze gry). Dość samo wyjaśniające.

originX - the x-coordinate of the scaling and rotation origin relative to the screen space coordinates 
originY - the y-coordinate of the scaling and rotation origin relative to the screen space coordinates 

te dwie wartości reprezentują lokalizację, w której dochodzi do rotacji (i skalowania) w odniesieniu do powierzchni ekranu. Na przykład, jeśli podasz tutaj wartość 0, 0, obrót i skalowanie nastąpi w jednym z narożników twojej tekstury (lewy dolny, jak sądzę), natomiast jeśli podasz centrum (szerokość/2, wysokość/2), obracanie i skalowanie stałoby się wokół środka swojej fakturze (to jest chyba to, co chcesz za „normalnych” obrotów)

width - the width in pixels 
height - the height in pixels 

wymiarów do rysowania tekstur na ekranie.

scaleX - the scale of the rectangle around originX/originY in x 
scaleY - the scale of the rectangle around originX/originY in y 

wartości reprezentujące skalę prostokąta, gdzie wartości od 0 do 1 skurczy prostokąta, natomiast wartości większe niż jeden rozszerzy prostokąta. Zwróć uwagę, że jest to w odniesieniu do pochodzenia, które podałeś wcześniej, co oznacza, że ​​jeśli nie jest to środek, obraz może wyglądać na zniekształcony.

rotation - the angle of counter clockwise rotation of the rectangle around originX/originY 

kąt obrotu obrazu o. Ponownie, jest to około pochodzenia danego wcześniej, więc rotacja nie może pojawić się „poprawne” czy pochodzenie nie jest centrum obrazu

srcX - the x-coordinate in texel space 
srcY - the y-coordinate in texel space 

te dwie wartości są lokalizacja począwszy od rzeczywistego obszaru obrazu plik (.png, .jpg, cokolwiek), którego chcesz użyć w pikselach. Zasadniczo początek obrazu.

srcWidth - the source with in texels 
srcHeight - the source height in texels 

podobnie, te dwie wartości to szerokość i wysokość rzeczywistego regionu używanego pliku obrazu w pikselach.

flipX - whether to flip the sprite horizontally 
flipY - whether to flip the sprite vertically 

Wreszcie te dwa booleany są używane do odwrócenia obrazu w poziomie lub w pionie.

Teraz możesz zauważyć, że podobny method for drawing TextureRegions nie ma srcX, srcY, srcWidth lub srcHeight. To dlatego, że są to values you give to a texture region when you create it from a texture.

Zasadniczo, co to oznacza to, że polecenie

//with TextureRegions 
SpriteBatch.draw(textureRegion, x, y, originX, originY, width, height, scaleX, scaleY, rotation); 

jest równoważna

//with Textures from TextureRegions 
SpriteBatch.draw(textureRegion.getTexture(), x, y, originX, originY, width, height, scaleX, scaleY, rotation, textureRegion.getRegionX(), textureRegion.getRegionY(), textureRegion.getRegionWidth(), textureRegion.getRegionHeight(), false, false); 
+0

Dziękuję bardzo za to, że naprawdę musi umieścić dużo czasu na to, bo to jest niesamowite! !! Bardzo pomocne. Myślę, że Mario z libgdx powinien umieścić to w javadocs dla libgdx. : P Chciałbym oddać głos, ale nie mam wystarczającej liczby przedstawicieli, ale postaram się zdobyć trochę, aby to upomnieć. – vedi0boy

+1

Stało się to dla mnie całkiem jasne, ale zauważ, że 'x' i' y' są względne w stosunku do 'originX' i' originY', które z kolei odnoszą się do obszaru ekranu. Nie wiem, dlaczego dokumentacja stwierdza, że ​​są one względem obszaru ekranu. Ta funkcja dosłownie robi "ostateczny float worldOriginX = x + originX;". – Juan

Powiązane problemy