【发布时间】:2016-08-12 04:01:01
【问题描述】:
我最近在制作 C++11/SDL 游戏引擎时遇到了困难,我可以参考一些建议。 理想情况下,我想做的是:
- 创建表示要添加到 spritebank 的所有 sprite 的枚举
- 创建文件名向量,并使用枚举将每个文件名添加到向量中
- 遍历所有加载的文件名,并使用枚举创建具有特定属性的精灵
但是第二步(files.emplace() 函数)给出these errors,第三步(switch(sprite_file))根据我使用this->sprite_file 或sprite_file 给出不同的错误。关于如何使这个想法发挥作用的任何想法?我使用的代码如下(如果缺少任何信息,请随意说)
//abstracted application class that starts the program//
std::vector<std::string> files;
class App : public Event
{
private:
bool Running; //Running flag
enum sprite_file
{
SPRITE_RING1 = 0,
SPRITE_RING2 = 1,
SPRITE_END = 2
};
SDL_Window* graphicsWindow; //The window
SDL_Renderer* graphicsRenderer; //The renderer
TTF_Font* globalFont; //The global font
Timer capTimer; //Frames per second cap timer
SpriteBank rings; //Collection of sprites
std::string currentSprite; //Filename of sprite in use
[...]
//abstracted initialization function within App//
//Initialize spritebank
if(!rings.Init(graphicsRenderer))
{
printf("Failed to load sprites!");
}
//Add two sprites
files.emplace(SPRITE_RING1, "media/img/ring/ring1.png");
files.emplace(SPRITE_RING2, "media/img/ring/ring2.png");
//Add two sprites
for(auto filename : files)
{
switch(this->sprite_file)
{
case SPRITE_RING1:
{
rings.AddSprite(filename,
40,
40,
40,
20,
20);
break;
}
case SPRITE_RING2:
{
rings.AddSprite(filename,
40,
40,
40,
20,
20);
break;
}
default: continue; break;
}
}
currentSprite = SPRITE_RING1;
【问题讨论】:
-
请不要发布您的错误截图。复制“n”将错误粘贴到您的问题中。
-
你到底想用
files.emplace(SPRITE_RING1, "media/img/ring/ring1.png");做什么?您基本上是将枚举和字符串文字传递给std::string的构造函数。你期望std::string的构造函数对这两个参数做什么?