c++ - 如何改进我的功能

标签 c++ sfml

我的类(class)有一个功能,它加载 2 张图像但仅根据特定条件显示一次。

问题是我必须在条件出现之前先加载图像,这是在我的主循环中发生的。我不确定这是否明智,所以想知道我可以做些什么来让它稍微优雅一点......

这是我的:


主循环:

btn_quit.RenderBttn(window,mouseX,mouseY);

类函数

void RenderBttn(sf::RenderWindow &destination,int mouseX, int mouseY)
{

    std::string img = "button.png";
    sf::Texture button;
    if (!button.loadFromFile(img)){
      exit(4);
    }

    std::string img_on = "button_on.png";
    sf::Texture button_on;
    if (!button_on.loadFromFile(img_on)){
      exit(5);
    }

    sf::Sprite sprite(button);
    m_w = sprite.getLocalBounds().width; //get dimensions
    m_h = sprite.getLocalBounds().height; //get dimensions

    sf::Sprite result(IsIn(mouseX,mouseY) ? button_on : button);    //check if mouse is over the button 
    result.setPosition(m_x,m_y);
    destination.draw(result);
}

我的一个解决方案是使用固定数量的按钮大小,但这限制了以后更改图像大小的能力。

但我每次都会在主循环中加载 2 张图像,这肯定对性能不利吗?

希望你能帮上忙:)

最佳答案

您应该做的是将加载的图像存储为可以在主循环中访问的变量。例如,如果您的主循环在一个类中,请向其添加 sf::Texture button; 成员变量。当您加载程序时,加载那两个图像,然后您可以在循环的每次迭代中执行检查以查看是否绘制它们。这里的关键是加载一次并将它们存储在内存中,需要时选择使用它们。如果你注意到在你玩的大多数游戏中,通常是在 map 的开头,它的所有资源(如纹理、声音等)都在“加载屏幕”加载,此时它们在内存中等待使用(注意不是所有的游戏都是这样,但只是一个例子)。

关于c++ - 如何改进我的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13261317/

相关文章:

c++ - 为什么我的 C++ 编译器不能推导出 boost 函数的模板参数?

c++ - 继承 SFML 中的 Transformable 和 Drawable

c++ - SFML 边界框碰撞检测

c++ - 旋转 block 时如何修复 block 之间的间距?

c++ - 检查是否使用 MATLAB mex 编译

php - 高性能Web Spider的开发

c++ - std::shared_ptr _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 改变指针时

c++ - 如何快速清除SFML-Image? C++

c++ - 使用归并排序进行倒置计数

c++ - opencv 将图像与文本二值化