Есть несколько проблем с вашим кодом из того, что я прочитал:
Несколько причин, по которым он не работает
Ошибка запятой
Вы Кажется, вы используете запятую, чтобы написать свое намерение, как на другом языке здесь:
Tex["A", "D", "E", "Q", "S", "W", "X", "Z", "Esc"] = ATex, DTex, ETex, QTex, STex, WTex, XTex, ZTex, EscTex;
Вы не можете использовать запятую таким образом в c ++. Здесь вы используете встроенный оператор запятой. Как указано здесь: https://en.cppreference.com/w/cpp/language/operator_other
В выражении запятой E1, E2 выражение E1 оценивается, его результат отбрасывается (хотя, если оно имеет тип класса, оно выигрывает не уничтожается до конца содержащего полного выражения), и его побочные эффекты завершаются до начала вычисления выражения E2 (обратите внимание, что пользовательский оператор не может гарантировать последовательность) (до C ++ 17).
Здесь каждое выражение, за которым следует запятая, ничего не будет делать, пока не будет использован последний параметр, поэтому ваше выражение будет Tex["Esc"] = EscTex;
.
То же самое будет и с line
Sprite["A", "D", "E", "Q", "S", "W", "X", "Z", "Esc"] = ASprite, DSprite, ESprite, QSprite, SSprite, WSprite, XSprite, ZSprite, EscSprite;
Позже, когда вы попытаетесь использовать, например, Tex ["A"], он создаст новую пустую текстуру, которую вы никогда не указывали.
Копирование вставки ошибка
Каждая setTexture
функция вызывается на ASprite
, я не думаю, что это ваше намерение здесь.
Различные советы
Инициализируйте один раз
Вы никогда не должны загружать из одного и того же файла в вашем рендеринге (или любом другом) l oop, поскольку это очень дорогостоящая операция. Даже создание спрайта может быть выполнено только один раз, избегая затрат на создание каждого кадра.
Согласованная норма
У вас есть несколько переменных, которые начинаются с заглавной буквы, некоторые нет, попробуйте быть последовательным здесь. как указано в C ++ Core Guidelines
Other
sf::Style::None; //<This line doesn't do anything
Редактировать
Для решения ошибки запятой способом c ++ , используйте список инициализаторов карты:
map<string, sf::Texture> Tex;
Tex = {
{ "A", ATex },
{ "B", BTex },
{ "C", CTex },
// ...
};