Jump to content

  • Log In with Google      Sign In   
  • Create Account

FREE SOFTWARE GIVEAWAY

We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.


Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


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: 810

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: 4596

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: 810

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