0
\$\begingroup\$

I am having an issue with the isometric coordinates.

When I enter the coordinates (5,5), the character should be at the bottom corner of the tile, but it is at the top corner, (5,5) and (0,0) look like they have been switched :

enter image description here

With (5,5), my character goes at the top instead of being at the bottom corner :

enter image description here

(The convertToScreen method is from : Isometric rendering and picking? )

//create isometric tiles public Vector2 convertToScreen(float x, float y, int offsetX, int offsetY) { Vector2 screen; float TILE_WIDTH = 1; float TILE_DEPTH = 0.5f; //calculate the screen coordinates float _x = offsetX - (y * TILE_WIDTH/2) + (x * TILE_WIDTH/2) - (TILE_WIDTH/2); float _y = offsetY + (y * TILE_DEPTH/2) + (x * TILE_DEPTH/2); screen = new Vector2(_x, _y); return screen; } //in the "create" method float valueCam = 10; camera = new OrthographicCamera(valueCam, valueCam * (Gdx.graphics.getHeight() / (float)Gdx.graphics.getWidth())); camera.translate(new Vector2(0,0)); Vector2 conv = convertToScreen(5,5, 0,0); myCharacter.setPosition(conv.x, conv.y); public void renderMap(){ float tileWidth = 1; float tileHeight = 0.5f; for (int x = 0; x < 5; x++){ for(int y = 5-1; y >= 0; y--){ Vector2 v = convertToScreen(x,y, 0,0); float x_pos = v.x; float y_pos = v.y; //float x_pos = (x * tileWidth*0.5f ) + (y * tileWidth*0.5f); //float y_pos = - (x * tileHeight*0.5f) + (y * tileHeight*0.5f); 

(edit: the previous issue was the offset of x-1, fixed by changing the x_pos and y_pos as shown above)

\$\endgroup\$
6
  • \$\begingroup\$ This is a little bit unclear. Is the map meant to stay in place, and the character be at the specified (x,y) position on the grid? \$\endgroup\$ Commented Feb 14, 2014 at 21:01
  • \$\begingroup\$ @karmington : yes, for now the character does not move, he should be at the top/left/right/bottom corner of the map, but there is an offset. The goal is to make him walk on the map, going from one tile to another following a path. \$\endgroup\$ Commented Feb 15, 2014 at 7:16
  • 1
    \$\begingroup\$ Please make the program first keep the map centered on the screen, and check the results. \$\endgroup\$ Commented Feb 15, 2014 at 17:03
  • \$\begingroup\$ @karmington Thanks, you were right, the previous code added the offset, I changed the code in render map in order to use the same convertToScreen method, except (0,0) and (5,5) are still switched? The image in my edit shows the character at 5,5, at the top corner, instead of being at the bottom. \$\endgroup\$ Commented Feb 16, 2014 at 5:17
  • 1
    \$\begingroup\$ Now check that the grid coordinates you assume are correct. Place the stone tile on each corner in turn, and verify that the grid coordinates are really as you imagine. I suspect the whole grid is flipped right now, and the character is actually in the 'correct' place. \$\endgroup\$ Commented Feb 16, 2014 at 8:46

1 Answer 1

0
\$\begingroup\$

The centre of the screen is x_pos:0 y_pos:0.

As you draw the tiles, y positive is 'upwards' on the screen.

So the code is now functioning correctly, but your perception of the tile positions is horizontally mirrored.

\$\endgroup\$
1
  • \$\begingroup\$ Thank you, I think I actually did not see it correctly, you were right. May I ask you to have a look at another thread? I am struggling to understand the problem : gamedev.stackexchange.com/questions/70526/… \$\endgroup\$ Commented Feb 16, 2014 at 11:41

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.