Я изо всех сил пытался понять большую часть вашего кода, так как переменные, кажется, написаны на французском языке, но я могу дать вам несколько общих советов.
При принятии решения, когда использовать класс, вы должны сначала подуматьо содержании вашей программы с точки зрения объектов.Например: если есть персонаж / человек, или что-то, что вы считаете независимым объектом в реальном мире, есть разумный шанс, что это должен быть его собственный класс.Класс должен содержать все, что необходимо для описания объекта, например, его положение, масштаб, спрайт и т. Д. Вот пример:
class Person
{
private:
sf::Vector2f position;
sf::Sprite sprite;
public:
void setPosition(sf::Vector2f newPosition);
sf::Vector2f getPosition();
void draw(sf::RenderWindow& window);
}
Если вы хотите, чтобы у вашего класса была позиция и тому подобное, я рекомендую извлечь изsf::Transformable
класс, чтобы сэкономить ваше время и усилия.Вы также можете получить из sf::Drawable
, если хотите нарисовать свой объект, используя window.draw(person)
, как это могут сделать многие объекты SFML по умолчанию.
class Person : public sf::Transformable, public sf::Drawable
{
private:
sf::Sprite sprite;
void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
states.transform *= getTransform();
target.draw(sprite, states);
}
}
У вас есть ряд переменных, которые вы называете константами.Если это так, то рекомендуется помечать их как таковые с помощью const
.Например:
const int scalePerso = 3;
Это мешает вам изменить значение в будущем и вызвать ошибки, которые вам нужно отследить.
Я также заметил, что вы определяете отдельные переменные для позиций X и Y,В этом нет необходимости, поскольку SFML определяет тип sf :: Vector2.Например:
const sf::Vector2f tailleSpritePosition(32.f, 48.f);
вместо
int tailleSpriteX = 32;
int tailleSpriteY = 48;
Вы также немного смешиваете типы, передавая целые числа в функции, которые принимают значения с плавающей запятой.Это также считается плохой практикой.Если вы хотите преобразовать целое число в число с плавающей точкой, вы должны явно привести его, используя (float)
, например, так:
rect.setSize(sf::Vector2f((float)tailleEcranX - 10.f, (float)tailleEcranY - 10.f));
, убедившись, что добавили букву f
в конце ваших литералов,компилятор это тоже значения с плавающей точкой.Кроме того, в некоторых случаях вы можете просто определить переменные типа float
, с которых можно начинать.
Не стесняйтесь спрашивать, есть ли что-то, чего вы не понимаете.