2013-08-02 12 views
7

Czy mogę użyć kamery perspektywicznej do renderowania partii duszków?Czy mogę renderować SpriteBatch przy użyciu PerspectiveCamera w libGDX?

Wszystkie moje duszki (te załadowane z tą samą fakturą) mają ten sam rozmiar, ale chcę, aby kamera znajdowała się na dole ekranu na pewnej wysokości, więc te ikonki, które są umieszczone w górnej części ekranu, wyglądają na mniejsze. W tej chwili wygląda jak ten po lewej, ale chcę, żeby wyglądał jak ten po lewej: enter image description here

Odpowiedz

7

Tak, chociaż prawdopodobnie trzeba będzie trochę skorygować/skalować współrzędne (można użyć spriteBatch.setTransformMatrix zrobić to w jednym wywołaniu). Oto mały przykład:

public class SpriteBatch3DTest extends GdxTest { 
    PerspectiveCamera cam; 
    CameraInputController camController; 
    SpriteBatch spriteBatch; 
    Texture texture; 

    @Override 
    public void create() { 
     cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     cam.position.set(0f, 8f, 8f); 
     cam.lookAt(0,0,0); 
     cam.near = 0.1f; 
     cam.far = 300f; 
     cam.update(); 

     spriteBatch = new SpriteBatch(); 

     camController = new CameraInputController(cam); 
     Gdx.input.setInputProcessor(camController); 
     texture = new Texture(Gdx.files.internal("data/badlogic.jpg")); 
    } 

    @Override 
    public void render() { 
    camController.update(); 
    spriteBatch.setProjectionMatrix(cam.combined); 

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

    spriteBatch.begin(); 
    spriteBatch.draw(texture, -5f, -5f, 10f, 10f); 
    spriteBatch.end(); 
    } 

    @Override 
    public void dispose() { 
     spriteBatch.dispose(); 
     texture.dispose(); 
    } 

    public boolean needsGL20() { 
     return true; 
    } 

    public void resume() { 
    } 

    public void resize (int width, int height) { 
    } 

    public void pause() { 
    } 
} 
+0

dzięki działa świetnie. Ale moje koliste duszki wyglądały na gładkie, teraz wyglądają na postrzępione na obwodzie? Również mój touchpad, którego używałem tutaj http://www.bigerstaff.com/libgdx-touchpad-example/ pokazuje, ale nie mogę tego użyć, mam na myśli pokrętło nie porusza się, więc nie dostaję z niego żadnego sygnału –

+0

dlaczego kamera ta nie zmienia touchpada, który jest aktorem na scenie? Używam tego samego SpriteBatch dla normalnego obiektu i touchapd, ale tylko normalne obiekty wyglądają tak, jak chcę –

+2

Domyślnie etap wykorzystuje OthographicCamera, możesz zmienić kamerę za pomocą stage.setCamera (...) ;. Ponadto stage używa camera.unproject do tłumaczenia współrzędnych ekranu na etap, w którym przyjmuje z = 0. To może nie działać dla Ciebie, więc prawdopodobnie będziesz chciał przedłużyć etap i przesłonić wartości ScreenToStageCoordinates. Aby uzyskać lepszy (gładki) render, spróbuj zmienić tekst minFilter/magFilter. Domyślnie jest to Najbliżej, spróbuj ustawić na Linear. Tl; dr Stage nie jest przeznaczony do użytku z PerspectiveCamera, nie polecam go. – Xoppa