SFML类不会绘制C ++

时间:2013-12-08 07:31:47

标签: c++ class graphics drawing sfml

这是我关于SO的第一篇文章,如果我做得不对,请原谅我。 我试图使用C ++ SFML绘制一些简单的六边形网格。十六进制网格在本类中创建,并在main中调用。

Hex class Header

            class Terrain : public sf::Drawable, public sf::Transformable
            {
            public:
                explicit Terrain(sf::Texture texture, int x, int y);
                sf::Texture texture;
                sf::CircleShape hexMethod(float x, float y, float Radius);
                virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
                void cameraAngle();
                void setTexture(sf::Texture);
                void setX(int xint);
                void setY(int yint);
                void update(sf::Time deltaTime);
                sf::Time T_currentTime;

            private:
                sf::Texture m_terrain;
                int xcoord, ycoord;
                sf::Vertex m_verticeList[6];

                bool isOdd(int integer)
                {
                    if (integer % 2 == 0)
                        return true;
                    else
                        return false;
                }
                //virtual ~Terrain()
                //{
                //}
            };

Hex class cpp

            Terrain::Terrain(sf::Texture texture, int x, int y) :
            m_terrain(texture), xcoord(x), ycoord(y)
            {
            }
            void Terrain::setTexture(sf::Texture newText)
            {
                m_terrain = newText;
            }
            void Terrain::setX(int xint)
            {
                xcoord = xint;
            }
            void Terrain::setY(int yint)
            {
                ycoord = yint;
            }

            sf::CircleShape Terrain::hexMethod(float x, float y, float Radius){

                float Width = Radius * 2, Height = Width *sqrt(3) / 2;
                sf::CircleShape shape(Radius, 6);
                float origo = 200;
                float yrsize;
                float normalDistanceX = origo + Width * 3 / 4 * x;
                float normalSeparationY = origo + Height*y;
                float isEven = Height / 2;
                shape.setTexture(&texture, false);
                shape.setOutlineThickness(2);
                shape.setOrigin(Radius, Radius);
                shape.setRotation(30);
                if (Terrain::isOdd(x))
                    yrsize = normalSeparationY;
                else
                    yrsize = normalSeparationY + isEven;
                shape.setPosition(normalDistanceX, yrsize);
                m_verticeList[0] = shape.getPoint(0);
                m_verticeList[1] = shape.getPoint(1);
                m_verticeList[2] = shape.getPoint(2);
                m_verticeList[3] = shape.getPoint(3);
                m_verticeList[4] = shape.getPoint(4);
                m_verticeList[5] = shape.getPoint(5);
                return shape;
            }

            void Terrain::draw(sf::RenderTarget& target, sf::RenderStates states) const
            {
                for (size_t i = 0; i < 3; i++)
                {
                    for (size_t j = 0; j < 3; j++)
                    {
                        states.transform *= getTransform();
                        states.texture = &m_terrain;
                        target.draw(m_verticeList, 4, sf::Points, states);
                    }
                }

            }

我如何在main中调用它:

            int main()
            {
                sf::RenderWindow window(sf::VideoMode(800, 800), "Puppet Masters!");
                if (!tTexture.loadFromFile("Green.jpg"))
                    return EXIT_FAILURE;
                Terrain newterrain(tTexture, 3,3);
                newterrain.hexMethod(3, 3, 70);
                while (window.isOpen())
                {
                    sf::Event event;
                    while (window.pollEvent(event))
                    {
                        if (event.type == sf::Event::Closed)
                            window.close();
                        if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::P)
                        {
                    }
                    window.clear();
                    window.draw(newterrain);
                    window.display();
                }

                return 0;
            }

运行代码时没有错误,但是我也没有结果,只是一个空白的黑屏。我的目的是从调用类中定义并定义它的变量。我在main中使用的Hex函数首先使十六进制网格工作,我不知道如何正确地将它转换为一个类。

0 个答案:

没有答案