不是在启动时加载所有内容,是否可以仅在启动时加载所需的资源,并仅在需要使用时加载每个资源?
如何做到这一点?
我尝试过使用C ++ / SFML,但是在尝试这个时我遇到了错误。我真的不想在启动时立即加载所有内容,因为它使我的程序在启动时显示白屏30秒,而我希望它更快。
为了澄清,我指的是sf::Texture
,sf::Sprite
,sf::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;错误。我怎样才能做到这一点?
答案 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;
}
}