J'ai une carte isométrique dessinée.LibGdx - Crée un sprite suivant un tracé linéaire
Je prends la position actuelle de mon sprite et la position cible de l'endroit où mon sprite devrait être à après le déménagement:
// region is my TextureRegion.
int x1 = getIsometricX(1,1,region);
int x2 = getIsometricX(1,2,region);
int y1= getIsometricY(1,1,region);
int y2 = getIsometricY(1,2,region);
Et puis je tracer une simple ligne en utilisant ShapeRenderer
pour voir si le local/cible les points sont correctement définis et le rectangle vous permet de voir où commence le rendu de l'image-objet.
renderer.setProjectionMatrix(camera.combined);
renderer.begin(ShapeRenderer.ShapeType.Line);
renderer.setColor(Color.RED);
renderer.line(x1 + location.getOffsetx(), y1 + location.getOffsety(), x2 + location.getOffsetx(), y2 + location.getOffsety());
renderer.rect(x1 + location.getOffsetx(), y1 + location.getOffsety(), region.getRegionWidth(), region.getRegionHeight());
renderer.end();
Chaque sprite de la mine a mis offsetX et offsetY pour ajuster sa position sur le carreau isométrique, parce que chaque sprite est différent.
sortie ressemble à ceci:
ce que vous pouvez voir ici, est le point de départ de l'endroit où le sprite commence à dessiner (vous voyez que les compensations ajustées si le sprite ressemble à son sur la 1,1
tuile.
et vous pouvez voir la ligne qui commence au point de tirage au sort à partir de l'image-objet, et se termine au point de tirage cible de l'image-objet.
maintenant, ma question est, Comment est-ce que je peux faire bouger ce sprite sur le chemin de cette ligne, alors on dirait que le vaisseau avance?
Ainsi, le concept principal de la question est .. Comment pouvez-vous faire un mouvement de sprite en ligne droite, du point local jusqu'au point cible?
Certaines fonctions vous pourriez avoir besoin de voir:
public int getIsometricX(int x, int y, TextureRegion region) {
return (x * GameTile.TILE_WIDTH/2) - (y * GameTile.TILE_WIDTH/2) - (region.getRegionWidth()/2);
}
public int getIsometricY(int x, int y, TextureRegion region) {
return (x * GameTile.TILE_HEIGHT/2) + (y * GameTile.TILE_HEIGHT/2) - (region.getRegionHeight()/2);
}
Les carreaux sont dessinés avec la même méthode, juste avec la texture de carreaux.
Oui, il appelle tous les cadres. Si j'ajoute 1 à x et y à chaque fois, ce ne sera pas vraiment une ligne droite – Jony
Mais si la différence en y est 0, alors il va juste augmenter sur l'axe des x pour que le vaisseau se déplace en ligne droite –