Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


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.

  • You cannot reply to this topic
2 replies to this topic

#1 exOfde   Members   -  Reputation: 818

Like
0Likes
Like

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);

        }
        
        void Layer::LoadLayer()
        {
            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.


Sponsor:

#2 haegarr   Crossbones+   -  Reputation: 5365

Like
0Likes
Like

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).



#3 exOfde   Members   -  Reputation: 818

Like
0Likes
Like

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.






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.



PARTNERS