2012-06-08 2 views
0

Прежде всего, функция, о которой идет речь.Определение строки из другой строки, int и строковый литерал

bool Animation::loadFrames() 
{ 
     sf::Texture frame[frameCount]; 
     std::string pathToFrame; 
     for(int i = 1; i < frameCount; i++) 
     { 
      pathToFrame = pathToAnimation + i + ".jpg"; 
      if(!frame[i].loadFromFile(pathToFrame)) return false; 
     } 
     return true; 
} 

Линия, которая дает мне неприятности является

pathToFrame = pathToAnimation + i + ".jpg"; 

pathToAnimation еще один станд :: строка, FrameCount является внутр. Я хочу как-то создать одну строку, которая выглядит так: «./Assets/Sprites/Player/Stand/1.jpg»

Я знаю, почему мой код не работает, я просто не знаю, какой правильный код было бы.

+0

Я не говорю, что есть только один способ сделать это, но часто время анимации спрайтов загружаются с одного листа спрайтов. http://ken-soft.com/2009/01/02/sprite-class-in-c-using-sdl/ –

+0

Так, например, 'spriteWidth = imageWidth/frames;', то вы просто blit текущего кадра (анимация). –

+0

Причина, по которой я не использую лист спрайтов, - это изометрические спрайты и поэтому имеет 8 направлений для каждого кадра каждой анимации для спрайта. Полученные листы будут огромными, и поэтому их проще организовать в файлы и папки, а затем загрузить их отдельно. –

ответ

0

В дополнение к ответу Иоахима, вы можете также использовать 11 C++ в новые to_string функции для преобразования int в std::string

pathToFrame = pathToAnimation + std::to_string(i) + ".jpg"; 
+0

Лучшее решение и позволяет мне полностью удалить переменную pathToFrame и просто сделать 'if (! Frame [i] .loadFromFile (pathToAnimation + std :: to_string (i) +" .jpg ")) return false;' –

4

Вы, вероятно, ищет std::ostringstream:

std::ostringstream ostr; 
ostr << pathToAnimation << 123 << ".jpg" 

std::cout << ostr.str(); 
1

Использование boost::format вы могли бы написать:

pathToFrame = (boost::format("%1%%2%.jpg") % pathToAnimation % i).str(); 

С boost::lexical_cast вы также можете написать

pathToFrame = pathToAnimation + boost::lexical_cast<std::string>(i) + ".jpg"; 
3

Помимо использования std::ostringstream, C + +11 обеспечивает std::to_string с перегрузками для целых чисел с плавающей точкой. С std::to_string:

pathToFrame = pathToAnimation + std::to_string(i) + ".jpg"; 

с std::ostringstream:

std::ostringstream os; 
os << pathToAnomation << i << ".jpg"; 
pathToFrame = os.str(); 
Смежные вопросы