1 pièce(s) jointe(s)
[LibGdx] [isometric map Tmx] collision avec des tuiles
Bonjour,
depuis un petit moement maintenant je suis coincé avec la détection de collision avec des Tuiles.
J'uitlise donc un IsometricTiledMapRenderer.
Pour la detection des tuiles j'utilise la projection de la caméra pour déduire les coordonnées du point:
Code:
1 2 3 4 5
| private static Vector2 toIsometricGridPoint(float x, float y) {
Vector2 point = new Vector2(x, y);
point.rotate(45);
return point;
} |
Pour déplacer mon personnage, j'utilise:
Code:
1 2 3 4
| public static Vector2 screenToMap(Vector2 initialPosition) {
Vector3 v3 = GameScreen.getCamera().unproject(new Vector3(initialPosition, 0));
return new Vector2(v3.x, v3.y);
} |
Et les coordonnées transmises sont bonnes.
J'ai essayer d'utiliser un camera.project() mais ça ne fonctionne pas.
En allant un peu plus loin pour la collision avec une tuile qui a la propriété "blocked", il semble que l'angle de rotation n'est pas de 45°.
Un image en dira plus:
http://www.developpez.net/forums/att...&thumb=1&stc=1
la flèche en blanc indique le mouvement de mon personnage.
Les tuiles encadrées en rouge contiennent la propriété "blocked".
Le trait bleu est la collision que je détecte.
Cette collision semble bien être avec un angle de 45° mais ma map semble être avec un angle de 26 degrés. :( Bizarre tout ça. Je dois louper quelque chose.
Est-ce un problème avec la création de ma carte?
Voici le code de la création de la carte dans la méthode show de ma classe GameScreen qui implémente l'interface Screen:
Code:
1 2 3 4 5 6 7 8
| TmxMapLoader loader = new TmxMapLoader();
map = loader.load("maps/test.tmx");
renderer = new IsometricTiledMapRenderer(map);
camera = new OrthographicCamera();
TiledMapTileLayer collisionLayer = (TiledMapTileLayer) map.getLayers().get("foreground");
EntityManager.createPlayer(1 * collisionLayer.getTileWidth()/2, 1 * collisionLayer.getTileHeight()/2, collisionLayer); |
Merci pour votre aide.