J'ai la taille de carte 40000X20000, Je veux rendre seulement 2048X2048 et montrer sur l'écran seulement 1200X600 pixle, comment je fais cela?Comment afficher une partie de la carte et afficher une partie de celle-ci?
En d'autres termes, penser que je Grande carte, je ne veux pas rendre tout le 40000X20000 je veux rendre seule la plus petite carte 2048x2048
Mon écran me permet de montrer 1200X600 Pixle.
Mon code:
public class LibgdxGame extends ApplicationAdapter {
static final float WORLD_WIDTH = 40000.0f;
static final float WORLD_HEIGHT = 20000.0f;
// Define viewoport
private static final float VIRTUAL_WIDTH = 1200.0f;
private static final float VIRTUAL_HEIGHT = 600.0f;
// Move camera around
private static final float CAMERA_SPEED = 60.0f;
private OrthographicCamera camera;
private Viewport viewport;
private TiledMap map;
private TmxMapLoader loader;
private OrthogonalTiledMapRenderer renderer;
private Vector2 direction;
@Override
public void create() {
camera = new OrthographicCamera(15000, 15000);
viewport = new FitViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, camera);
camera.position.set(10900, 10800, 0);
loader = new TmxMapLoader();//
map = loader.load("40000X20000.tmx");
renderer = new OrthogonalTiledMapRenderer(map);
direction = new Vector2();
}
@Override
public void dispose() {
map.dispose();
renderer.dispose();
}
@Override
public void render() {
System.out.println("Render.........");
Gdx.gl.glClearColor(0.8f, 0.8f, 0.8f, 1.0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
updateCamera();
renderer.setView(camera);
renderer.render();
}
@Override
public void resize(int width, int height) {
viewport.update(width, height);
System.out.println(width);
System.out.println(height);
}
private void updateCamera() {
direction.set(0.0f, 0.0f);
int mouseX = Gdx.input.getX();
int mouseY = Gdx.input.getY();
int width = Gdx.graphics.getWidth();
int height = Gdx.graphics.getHeight();
if (Gdx.input.isKeyPressed(Keys.LEFT) || (Gdx.input.isTouched() && mouseX < width * 0.25f)) {
direction.x = -1;
}
else if (Gdx.input.isKeyPressed(Keys.RIGHT) || (Gdx.input.isTouched() && mouseX > width * 0.25f)) {
direction.x = 1;
}
if (Gdx.input.isKeyPressed(Keys.UP) || (Gdx.input.isTouched() && mouseY < height * 0.25f)) {
direction.y = 1;
}
else if (Gdx.input.isKeyPressed(Keys.DOWN) || (Gdx.input.isTouched() && mouseY > height * 0.25f)) {
direction.y = -1;
}
direction.nor().scl(CAMERA_SPEED * Gdx.graphics.getDeltaTime());;
camera.position.x += direction.x;
camera.position.y += direction.y;
TiledMapTileLayer layer = (TiledMapTileLayer)map.getLayers().get(0);
float cameraMinX = viewport.getWorldWidth() * 0.5f;
float cameraMinY = viewport.getWorldHeight() * 0.5f;
float cameraMaxX = layer.getWidth() * layer.getTileWidth() - cameraMinX;
float cameraMaxY = layer.getHeight() * layer.getTileHeight() - cameraMinY;
camera.position.x = MathUtils.clamp(camera.position.x, cameraMinX, cameraMaxX);
camera.position.y= MathUtils.clamp(camera.position.y, cameraMinY, cameraMaxY);
camera.update();
}
}
Je pense que le rendu de carte mosaïque rend déjà automatiquement seulement assez de tuiles pour couvrir la zone visible. Je ne sais pas ce que vous voulez dire en disant que vous voulez rendre 2048x2048 si c'est beaucoup plus grand que la vue de la caméra. – Tenfour04
@ Tenfour04 a raison. Vous n'avez pas besoin de scessior ou autre. En fonction de la fenêtre d'affichage, le tiledmaprender rendra uniquement les pièces nécessaires et cela sera très efficace. Mais essayez toujours d'éviter d'avoir une grande quantité de tuiles dans la vue. Augmenter la taille des tuiles (combiner 4 à 1 par exemple). Testez toujours la performance. – BennX