Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: using .h with the vertex array tutorial  (Read 1672 times)

0 Members and 1 Guest are viewing this topic.

nimn

  • Newbie
  • *
  • Posts: 13
    • View Profile
using .h with the vertex array tutorial
« on: March 04, 2017, 01:30:32 am »
howdy,

Executive Summary:
I'm getting an error when moving class definition to a separate .h file -
(no instance of overloaded function "sf::RenderWindow::draw" matches the argument list)   

Narrative:
Having a dumb issues that I'm too dumb to figure out.
I have a pretty decent game going (avatar related) that is entirely sprite based.
I have been needing a major upgrade to vertex arrays   
Just trying to adapt the vertex array tutorial the game and will rebuild around it.
Trying to move class definitions (interpret loosely - terminology?) to a .h file. First step in adaptation...
heres the error: (no instance of overloaded function "sf::RenderWindow::draw" matches the argument list)   

and the .h:

class TileMap {
public:
        bool load(const std::string& tileset, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height);

private:
        virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
};

class loop {
        int main();
};
 

and the .cpp (spoiler alert - its the tutorial):

        bool load(const std::string& tileset, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height) {
                sf::VertexArray m_vertices;
                sf::Texture m_tileset;
                // load the tileset texture
                if (!m_tileset.loadFromFile(tileset))
                        return false;

                // resize the vertex array to fit the level size
                m_vertices.setPrimitiveType(sf::Quads);
                m_vertices.resize(width * height * 4);

                // populate the vertex array, with one quad per tile
                for (unsigned int i = 0; i < width; ++i)
                        for (unsigned int j = 0; j < height; ++j)
                        {
                                // get the current tile number
                                int tileNumber = tiles[i + j * width];

                                // find its position in the tileset texture
                                int tu = tileNumber % (m_tileset.getSize().x / tileSize.x);
                                int tv = tileNumber / (m_tileset.getSize().x / tileSize.x);

                                // get a pointer to the current tile's quad
                                sf::Vertex* quad = &m_vertices[(i + j * width) * 4];

                                // define its 4 corners
                                quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);
                                quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y);
                                quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y);
                                quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y);

                                // define its 4 texture coordinates
                                quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y);
                                quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);
                                quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);
                                quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);
                        }

                return true;
        }

void draw(sf::RenderTarget& target, sf::RenderStates states) {
        sf::VertexArray m_vertices;
        sf::Texture m_tileset;

                // apply the tileset texture
                states.texture = &m_tileset;

                // draw the vertex array
                target.draw(m_vertices, states);
        }


int main() {
        // create the window
        sf::RenderWindow window(sf::VideoMode(512, 256), "Tilemap");

        // define the level with an array of tile indices
        const int level[] =
        {
                0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,
                1, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
                0, 1, 0, 0, 2, 0, 3, 3, 3, 0, 1, 1, 1, 0, 0, 0,
                0, 1, 1, 0, 3, 3, 3, 0, 0, 0, 1, 1, 1, 2, 0, 0,
                0, 0, 1, 0, 3, 0, 2, 2, 0, 0, 1, 1, 1, 1, 2, 0,
                2, 0, 1, 0, 3, 0, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1,
                0, 0, 1, 0, 3, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1,
        };

        // create the tilemap from the level definition
        TileMap map;
        if (!map.load("tileset.png", sf::Vector2u(32, 32), level, 16, 8))
                return -1;

        // run the main loop
        while (window.isOpen())
        {
                // handle events
                sf::Event event;
                while (window.pollEvent(event)) {
                        if (event.type == sf::Event::Closed)
                                window.close();
                }

                // draw the map
                window.clear();
                window.draw(map);
                window.display();
        }

        return 0;
}
 




Hiura

  • SFML Team
  • Hero Member
  • *****
  • Posts: 4321
    • View Profile
    • Email
Re: using .h with the vertex array tutorial
« Reply #1 on: March 04, 2017, 09:50:31 am »
Hint: Are you trying to override `virtual void draw(...)` method in TileMap? If yes, your class lacks something w.r.t. inheritance. (The `override` keyword would have saved you there BTW.)
SFML / OS X developer

Hapax

  • Hero Member
  • *****
  • Posts: 3379
  • My number of posts is shown in hexadecimal.
    • View Profile
    • Links
Re: using .h with the vertex array tutorial
« Reply #2 on: March 04, 2017, 04:03:05 pm »
Your class should probably be inheriting from sf::Drawable ;)
Selba Ward -SFML drawables
Cheese Map -Drawable Layered Tile Map
Kairos -Timing Library
Grambol
 *Hapaxia Links*

 

anything