2013-08-02 14 views
7

Posso utilizzare la telecamera prospettica per rendere il mio sprite batch?posso rendere SpriteBatch usando PerspectiveCamera in libGDX?

Tutti i miei sprite (quelli caricati con la stessa trama) hanno le stesse dimensioni, ma voglio che la fotocamera sia posizionata nella parte inferiore dello schermo ad una certa altezza, quindi quelli sprite che sono posizionati vicino alla parte superiore dello schermo sembrano più piccoli. In questo momento assomiglia a quello a sinistra, ma voglio che assomigli a quello a destra: enter image description here

risposta

7

Sì, anche se probabilmente è necessario regolare/ridimensionare le coordinate un po '(è possibile utilizzare spriteBatch.setTransformMatrix per farlo in una sola chiamata). Ecco un piccolo esempio:

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

grazie funziona alla grande. Ma i miei sprite circolari sembravano sempre lisci, ora sembrano frastagliati alla circonferenza? Anche il mio touchpad che stavo usando da qui http://www.bigerstaff.com/libgdx-touchpad-example/ si presenta, ma non posso usarlo, voglio dire che la manopola non si muove e quindi non ottengo alcun input da esso –

+0

perché questa fotocamera di prospect non cambia il touchpad che è un attore sul palco? Io uso lo stesso SpriteBatch per oggetti normali e touchapd, ma solo gli oggetti normali sembrano come voglio io. –

+2

Per impostazione predefinita usa OthographicCamera, puoi cambiare la videocamera usando stage.setCamera (...) ;. Inoltre, stage usa camera.unproject per tradurre le coordinate dello schermo in fase, in cui assume z = 0. Questo potrebbe non funzionare per te, quindi probabilmente vorrai estendere Stage e sovrascrivere screenToStageCoordinates. Per ottenere un rendering migliore (uniforme), prova a cambiare il filtro minFilter/magFilter della tua texture. Credo che sia più vicino al valore predefinito, prova a impostarlo su Lineare. Tl; dr Stage non è progettato per l'uso con PerspectiveCamera, non lo consiglierei. – Xoppa

Problemi correlati