Je veux utiliser libgdx comme une solution à la mise à l'échelle des applications en fonction des proportions des écrans. j'ai trouvé ce lien, et je trouve vraiment utile: http://blog.acamara.es/2012/02/05/keep-screen-aspect-ratio-with-different-resolutions-using-libgdx/android - définir le point de départ en haut à gauche sur libgdx
je suis tout à fait rouillé opengl (n'ont pas écrit pour en années) et je souhaite utiliser l'exemple sur ce lien afin que ce serait facile de mettre des images et des formes. malheureusement, le point de départ est au milieu. Je veux l'utiliser comme sur beaucoup d'autres plates-formes - coin supérieur gauche devrait être (0,0), et le coin en bas à droite devrait être (targetWidth-1, targetHeight-1), de ce que je me souviens, je dois bouger (traduire) et faire pivoter la caméra afin de l'atteindre, mais je ne suis pas sûr.
voici mon code modifié de l'exemple du lien pour la méthode onCreate:
@Override
public void create()
{
camera=new OrthographicCamera(VIRTUAL_WIDTH,VIRTUAL_HEIGHT);
// camera.translate(VIRTUAL_WIDTH/2,VIRTUAL_HEIGHT/2,0);
// camera.rotate(90,0,0,1);
camera.update();
//
font=new BitmapFont(Gdx.files.internal("data/fonts.fnt"),false);
font.setColor(Color.RED);
//
screenQuad=new Mesh(true,4,4,new VertexAttribute(Usage.Position,3,"attr_position"),new VertexAttribute(Usage.ColorPacked,4,"attr_color"));
Point bottomLeft=new Point(0,0);
Point topRight=new Point(VIRTUAL_WIDTH,VIRTUAL_HEIGHT);
screenQuad.setVertices(new float[] {//
bottomLeft.x,bottomLeft.y,0f,Color.toFloatBits(255,0,0,255),//
topRight.x,bottomLeft.y,0f,Color.toFloatBits(255,255,0,255),//
bottomLeft.x,topRight.y,0f,Color.toFloatBits(0,255,0,255),//
topRight.x,topRight.y,0f,Color.toFloatBits(0,0,255,255)});
screenQuad.setIndices(new short[] {0,1,2,3});
//
bottomLeft=new Point(VIRTUAL_WIDTH/2-50,VIRTUAL_HEIGHT/2-50);
topRight=new Point(VIRTUAL_WIDTH/2+50,VIRTUAL_HEIGHT/2+50);
quad=new Mesh(true,4,4,new VertexAttribute(Usage.Position,3,"attr_position"),new VertexAttribute(Usage.ColorPacked,4,"attr_color"));
quad.setVertices(new float[] {//
bottomLeft.x,bottomLeft.y,0f,Color.toFloatBits(255,0,0,255),//
topRight.x,bottomLeft.y,0f,Color.toFloatBits(255,255,0,255),//
bottomLeft.x,topRight.y,0f,Color.toFloatBits(0,255,0,255),//
topRight.x,topRight.y,0f,Color.toFloatBits(0,0,255,255)});
quad.setIndices(new short[] {0,1,2,3});
//
texture=new Texture(Gdx.files.internal(IMAGE_FILE));
spriteBatch=new SpriteBatch();
spriteBatch.getProjectionMatrix().setToOrtho2D(0,0,VIRTUAL_WIDTH,VIRTUAL_HEIGHT);
}
jusqu'à présent, j'ai réussi à utiliser ce code pour utiliser des coordonnées mises à l'échelle, et toujours garder le rapport d'aspect (qui est super), mais je n'ai pas réussi à déplacer le point de départ (0,0) dans le coin supérieur gauche.
aidez-moi s'il vous plaît.
EDIT: ok, après quelques tests, je l'ai découvert que la raison de ce ne fonctionne pas est que j'utilise le SpriteBatch. Je pense qu'il ignore la caméra. ce code se produit dans la partie de rendu. peu importe ce que je fais à la caméra, il montrera toujours les mêmes résultats.
@Override
public void render()
{
if(Gdx.input.isKeyPressed(Keys.ESCAPE)||Gdx.input.justTouched())
Gdx.app.exit();
// update camera
// camera.update();
// camera.apply(Gdx.gl10);
// set viewport
Gdx.gl.glViewport((int)viewport.x,(int)viewport.y,(int)viewport.width,(int)viewport.height);
// clear previous frame
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
//
final String msg="test";
final TextBounds textBounds=font.getBounds(msg);
spriteBatch.begin();
screenQuad.render(GL10.GL_TRIANGLE_STRIP,0,4);
quad.render(GL10.GL_TRIANGLE_STRIP,0,4);
Gdx.graphics.getGL10().glEnable(GL10.GL_TEXTURE_2D);
spriteBatch.draw(texture,0,0,texture.getWidth(),texture.getHeight(),0,0,texture.getWidth(),texture.getHeight(),false,false);
spriteBatch.draw(texture,0,VIRTUAL_HEIGHT-texture.getHeight(),texture.getWidth(),texture.getHeight(),0,0,texture.getWidth(),texture.getHeight(),false,false);
font.draw(spriteBatch,msg,VIRTUAL_WIDTH-textBounds.width,VIRTUAL_HEIGHT);
spriteBatch.end();
}
il semble que cela ne fonctionne pas - le rectangle vert ne prend pas l'espace complet de la fenêtre, et le texte et les images ne montrent pas dans les bons endroits. –
il ne semble pas bien fonctionner sur Android. Je ne comprends pas ce qui me manque? Je souhaite également placer le point de départ dans le coin supérieur gauche, et non le point de départ (en bas à gauche). –
Votre caméra est tournée de 90 degrés ... est-ce que ça gâche X et Y? Essayez de supprimer cette ligne ou de la changer à 180? Sans images ou quelques détails, il est difficile de savoir ce qui "ne semble pas bien fonctionner" signifie spécifiquement. Peut-être que le moment est venu de poser une nouvelle question à ce sujet. –