是否可以在程序执行期间通过函数加载Sprite,Textures,Music?

时间:2016-06-28 05:15:38

标签: c++ sfml

不是在启动时加载所有内容,是否可以仅在启动时加载所需的资源,并仅在需要使用时加载每个资源?

如何做到这一点?

我尝试过使用C ++ / SFML,但是在尝试这个时我遇到了错误。我真的不想在启动时立即加载所有内容,因为它使我的程序在启动时显示白屏30秒,而我希望它更快。

为了澄清,我指的是sf::Texturesf::Spritesf::Music等。

更新:这里有一些代码

#include "SFML/Audio.hpp"
#include "SFML/Graphics.hpp"
#include <iostream>


void loadResources();

int main()
{


//create the main window
sf::RenderWindow window(sf::VideoMode(720, 500), "Sky Ocean");
window.setFramerateLimit(60);
window.setKeyRepeatEnabled(false);

//View
sf::View view1(sf::FloatRect(200, 200, 300, 200));
view1.setSize(sf::Vector2f(window.getSize().x, window.getSize().y));
view1.setCenter(sf::Vector2f(view1.getSize().x / 2, view1.getSize().y / 2));
window.setView(view1);

//load resources
loadResources();

//npc object
class npc npc1;
npc1.sprite.setTexture(textureNPC);

class npc npc2;
npc2.sprite.setTexture(textureNPC2);

class npc npc3;
npc3.sprite.setTexture(textureNPC3);

class npc npc4;
npc4.sprite.setTexture(textureNPC4);

如您所见,我在设置纹理之前调用该函数,但仍然出现错误。

void loadResources()
{
//load npc texture
sf::Texture textureNPC;
if (!textureNPC.loadFromFile("images/npc.png"))
    return EXIT_FAILURE;

sf::Texture textureNPC2;
if (!textureNPC2.loadFromFile("images/npc2.png"))
    return EXIT_FAILURE;

sf::Texture textureNPC3;
if (!textureNPC3.loadFromFile("images/npc3.png"))
    return EXIT_FAILURE;

sf::Texture textureNPC4;
if (!textureNPC4.loadFromFile("images/npc4.png"))
    return EXIT_FAILURE;
}

我得到了#34;未声明的标识符&#34;错误。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

您的问题是您在加载函数中声明了textureNPC。一旦结束,它们就会超出范围而不再存在。 在学习像SFML这样的库之前,您应该学习基础知识。 要解决问题,请重新构建事物,使它们处于相同的范围内。您可以通过类/结构,或通过将引用/指针传递给函数来实现。

注意:

你可以展示一些有趣的东西,而不是一个白色的屏幕 - 这是你加载屏幕的必要条件。

请注意,重新编译着色器时,Direct3D(DirectX渲染器)可能需要重新创建上下文。 我认为SFML应该处理它,但它可能有副作用。

struct Resources
{
    sf::Texture textureNPC;
    sf::Texture textureNPC2;
    sf::Texture textureNPC3;
    sf::Texture textureNPC4;

    Resources()
    {
        //load npc texture
        if (!textureNPC.loadFromFile("images/npc.png"))
        return EXIT_FAILURE;

        if (!textureNPC2.loadFromFile("images/npc2.png"))
            return EXIT_FAILURE;

        if (!textureNPC3.loadFromFile("images/npc3.png"))
            return EXIT_FAILURE;

        if (!textureNPC4.loadFromFile("images/npc4.png"))
            return EXIT_FAILURE;
    }
}