SFML - 窗口错误

时间:2013-11-26 10:23:19

标签: c++ image window sfml

我正在创建一个基准测试应用来测试渲染图像的速度。我创建了两个函数,一个用于返回RenderWindow,另一个用于使用RenderWindow在那里应用图像。当我调用第二个函数时,它会给我错误:No matching constructor for initialisation of 'sf::RenderWindow'

以下是我的功能:

sf::RenderWindow newWindow(int w, int h)
{
    sf::RenderWindow window;
    window.create(sf::VideoMode(w, h), "SFML Benchmark");
    return window;
}

void draw(int type, sf::RenderWindow dest) // 0 color small, 1 color big, 2 no color small, 3 no color big
{
    sf::Texture img;
    switch(type)
    {
        case 0: if(!img.loadFromFile("colorfull small.jpg")) cout << "Unable to laod image";
        case 1: if(!img.loadFromFile("colorfull big.jpg")) cout << "Unable to laod image";
        case 2: if(!img.loadFromFile("colorless small.jpg")) cout << "Unable to laod image";
        case 3: if(!img.loadFromFile("colorless big.jpg")) cout << "Unable to laod image";
    }
    sf::Sprite sprite;
    sprite.setTexture(img);
    dest.draw(sprite);
}

我在main中调用函数:

draw(1, newWindow(600, 600));

谢谢。

1 个答案:

答案 0 :(得分:1)

我不认为sf :: window是可复制的。

你的功能窗口应如下所示:

void draw(int type, sf::RenderWindow& dest)

注意&符号,表示引用而不是副本。

创建窗口的函数需要返回指向窗口的指针。当我写它时,我决定我没有它的功能,而是在main中执行,所以我可以使用局部变量作为窗口。

您的绘图功能不应创建和加载纹理和精灵。它可能每秒被调用很多次,您应该创建并加载所有资产一次,然后以计算机允许的速度绘制加载的资源。