• FEATURED

View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

# TileMap Coordinate Problem

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

2 replies to this topic

### #1exOfde  Members

Posted 16 October 2013 - 09:06 PM

Good morning,

I have a small problem i can't get solved right now, perhaps it's to early or i am to long awake but anyway. Here the problem:

I want write a Tilemape Editor or better the endresult should be an Editor. Right now i am writing code to read a map file and generate a drawable map from it. For this i need four classes. The map class, the layer class, the tileset class and the tile class.

The layer class generate a vector of tiles from a character source like this one:

1,0 1,0 1,0 1,0 1,1 1,0 1,0 1,0 1,0 1,0

1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0
1,0 x,x x,x x,x 0,0 x,x x,x x,x x,x 1,0
1,0 1,0 x,x x,x 1,0 x,x 1,1 x,x x,x 1,0
1,0 x,x x,x x,x 2,0 x,x x,x x,x x,x 1,0
1,0 x,x x,x x,x 3,0 1,1 0,0 x,x x,x 1,0
1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0
1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0
1,0 x,x x,x x,x x,x x,x x,x x,x x,x 1,0
1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0 1,0

Each tile is here represented as a multiplicator to calculate the position of each tile in a tileset (x,y).

the case (x,x) says only there is nothing.

Now i have two functions from the layer class:

void Layer::CheckMap(std::string value,sf::Vector2i& globalposition)
{

std::string xx = value.substr(0,value.find(',')); //Find X component of coordinate in the tileset
std::string yy = value.substr(value.find(',')+1); //Find y component of coordinate in the tileset
;//Save global Coordinate per tile

int x,y,i,j;

for(i = 0; i< xx.length();i++)
{
if(!std::isdigit(xx[i]))
break;
}

for(j = 0; j< yy.length();j++)
{
if(!std::isdigit(yy[j]))
break;
}

x = (i == xx.length()) ? std::atoi(xx.c_str()) : -1;
y = (j == yy.length()) ? std::atoi(yy.c_str()) : -1;

//sad try to get the X coordinate
globalposition.x++;
Tile* tmp = new Tile(this->m_Tileset,sf::Vector2i(x,y),globalposition,sf::Vector2i(32,32),0);
this->m_Tiles.push_back(tmp);

}

{
std::stringstream           cstream(this->m_LayerSource);
std::string                 value;
sf::Vector2i                globalposition(0,0);
if(this->m_Tileset == NULL)
{
this->m_Tileset = new graphic::Tileset(this->m_Tilesetpath,32);
}

while(!cstream.eof())
{

while(std::getline(cstream,value,' '))
{
if(value.length() > 0)
{
this->CheckMap(value,globalposition);
}
//Even sader try to get the Y coordinate
globalposition.y++;

}
globalposition.x = 0;

}
}


I'm very sure the solution is in front of me but i only can't see it right now....

What i need is the position on the screen which the user is seeing! But i don't get it managed to read out or calculate correctly the coordinates. Any idea how could i solve this problem?

Edited by exOfde, 17 October 2013 - 04:13 AM.

"Hello World"

### #2haegarr  Members

Posted 17 October 2013 - 12:48 AM

At least there is no iteration over the co-ordinate tuples in a line: Layer::LoadLayer iterates the file line by line, and Layer::CheckMap iterates not at all (letting the number checks aside).

### #3exOfde  Members

Posted 17 October 2013 - 04:07 AM

Oh... You are right. What's missing is theoretically  a check if the line are over to set X again to zero. So that i can iterate in the line.

At the moment i don't stop to increment x, so obvious... How stupid from me... that's happend without sleep, sad.

"Hello World"

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.