从函数C ++ / SFML加载资源的问题 [英] Problems loading resources from function C++/SFML

查看:446
本文介绍了从函数C ++ / SFML加载资源的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个结构,我用来声明纹理,精灵,音乐,字体,声音等在标题。然后使用相应的.cpp文件将所述纹理设置为对应的精灵,等等。

I have a stucture that I use to declare Textures, Sprites, Music, Fonts, Sounds, etc in a header. I then use a corresponding .cpp file to set said textures to their corresponding sprites, and so on.

我已经在main中创建了struct对象,并且调用了函数。但是当我构建我的程序,我得到一百万未声明标识符的错误。我做错了什么?这是我的代码:

I have created the struct object in main, and called the function. But When I build my program, I get a million "undeclared identifier" errors. What am I doing wrong? Here's my code:

resources.h:

resources.h:

#ifndef __SFML__resources__
#define __SFML__resources__

#include "SFML/Audio.hpp"
#include "SFML/Graphics.hpp"

struct resources
{
float opacity = 1.0;

sf::Texture texturePlayer;
sf::Texture textureSettingsMenu;
sf::Sprite spriteSaveMenu;
sf::Sprite spriteSettingsMenu;
//start screen texture
sf::Texture textureStart;
//gamestate background sprite
sf::Sprite spriteScreen;
sf::Font font;
sf::Font font2;
int loadResources();
// hundreds more lines of declarations below
//...
};
#endif

resources.cpp:

resources.cpp:

#include "resources.h"


int resources::loadResources()
{
if (!textureSaveMenu.loadFromFile("images/magicmenu3.png"))
    return EXIT_FAILURE;


if (!textureSettingsMenu.loadFromFile("images/inventorymenu.png"))
    return EXIT_FAILURE;

spriteSaveMenu.setTexture(textureSaveMenu);
spriteSettingsMenu.setTexture(textureSettingsMenu);

if (!textureStart.loadFromFile("images/skyocean.png"))
    return EXIT_FAILURE;

if (!font.loadFromFile("fonts/arial.ttf"))
    return EXIT_FAILURE;

if (!font2.loadFromFile("fonts/dominican.ttf"))
    return EXIT_FAILURE;

if (!musicBattle.openFromFile("audio/musicBattle.ogg"))
    return EXIT_FAILURE;
musicBattle.setVolume(20);
musicBattle.setLoop(true);


if (!musicOpening.openFromFile("audio/maintheme.ogg"))
    return EXIT_FAILURE;
musicOpening.setVolume(30);
musicOpening.setLoop(true);

if (!musicDefeat.openFromFile("audio/defeat.ogg"))
    return EXIT_FAILURE;
musicDefeat.setVolume(50);
musicDefeat.setLoop(true);

if (!musicForest.openFromFile("audio/forest.ogg"))
    return EXIT_FAILURE;
musicForest.setVolume(10);
musicForest.setLoop(true);

if (!musicWorldMap.openFromFile("audio/bluefields.ogg"))
    return EXIT_FAILURE;
musicWorldMap.setVolume(40);
musicWorldMap.setLoop(true);

if (!musicVillage.openFromFile("audio/welcomehome.ogg"))
    return EXIT_FAILURE;
musicVillage.setVolume(40);
musicVillage.setLoop(true);

//every single declared resource is set within this function
//but the function is too large to display fully here
}

main.cpp:

 #include "SFML/Audio.hpp"
 #include "SFML/Graphics.hpp"
 #include <iostream>
 #include "random.h"
 #include "player.h"
 #include "entity.h"
 #include "projectile.h"
 #include "enemy.h"
 #include "textDisplay.h"
 #include "pickup.h"
 #include "wall.h"
 #include "sword.h"
 #include "npc.h"
 #include "battlemenu.h"
 #include "cursor.h"
 #include "name.h"
 #include "itemshop.h"
 #include "characterselection.h"
 #include "mainmenu.h"
 #include "exp.h"
 #include "drops.h"
 #include "weaponshop.h"
 #include "armorshop.h"
 #include "startmenu.h"
 #include "room.h"
 #include "resources.h"


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
struct resources resources1;
resources1.loadResources();

//class object
class player Player1;
Player1.sprite.setTexture(texturePlayer);

class player Player2;
Player2.sprite.setTexture(texturePlayer);
Player2.rect.setScale(1.6, 1.6);
Player2.sprite.setScale(1.6, 1.6);

//...
}


推荐答案

首先,我建议您阅读关于头文件的一些

resources.h

resources.h例如应该如下所示:

resources.h for example should look like this:

//...

#include "entity.h"

#include <SFML/Graphics.hpp>
#include <Whatever.hpp>

struct resources
{

//...

这篇关于从函数C ++ / SFML加载资源的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆