我最近在制作C ++ 11 / SDL游戏引擎时遇到困难,我可以使用一些建议。 理想情况下,我想要做的是:
但第二步(files.emplace()函数)给出these errors,第三步(switch(sprite_file))根据我使用this->sprite_file或{{3}给出不同的错误}。关于如何使这个想法发挥作用的任何想法?我使用的代码如下(如果有任何信息遗失,请随时说出来)
//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;
答案 0 :(得分:2)
两个明显的问题:
std::vector
不像std::map
那样有效。即便如此,我还不确定你是否拥有超过这3个枚举元素。也许你想在矢量中使用一个结构?
此外,您无法切换enum
的声明名称。您必须切换具有枚举值的变量才能进入开关,并且能够进行编译。
//example:
sprite_file myVar = SPRITE_RING1;
switch (myVar)
{
//...
}
此外,您无法将枚举的整数值指定给std::string
。
currentSprite = SPRITE_RING1
最简单的方法是创建枚举类型的另一个变量。