首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在稍后的程序执行过程中通过函数加载Sprite,Textures,Music?

是否可以在稍后的程序执行过程中通过函数加载Sprite,Textures,Music?
EN

Stack Overflow用户
提问于 2016-06-28 13:15:38
回答 1查看 65关注 0票数 0

与其在启动时加载所有资源,还不如在启动时仅加载所需的资源,并仅在需要使用时加载每个单独的资源?

如何做到这一点?

我已经尝试过修改C++/SFML,但是当我尝试这样做时,我得到了错误。我真的不想在启动时一次加载所有的东西,因为它使我的程序在启动时显示30秒的白屏,而我更希望它更快。

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

更新:以下是一些代码

代码语言:javascript
复制
#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);

正如你所看到的,我在设置纹理之前调用了这个函数,但是我仍然得到一个错误。

代码语言:javascript
复制
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;
}

我得到了“未声明的标识符”错误。我怎么才能让它工作呢?

EN

回答 1

Stack Overflow用户

发布于 2016-06-28 13:25:02

您的问题是您在加载函数中声明了textureNPC。一旦结束,它们就会超出范围,不复存在。在学习像SFML这样的库之前,您应该先学习基础知识。要解决这个问题,请重新组织它们,使它们在相同的范围内。您可以通过class/struct或通过向函数传递引用/指针来完成此操作。

备注:

你可以显示一些有趣的东西,而不是一个白屏--这基本上是你的加载屏幕。

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

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38067548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档