Решил создать класс кнопки. Изначально я хотел сделать кнопку как RectangleShape, а не как Sprite, но кнопка так и продолжала не отрисовываться. Через “вставьте код” не получилось вставить, прошу прощения за неудобства. Убрал все лишнее из кода и добавил комментарии, чтобы вам было понятно что я вообще хотел сделать.
#include “SFML/Graphics.hpp”
#include <string>
using namespace sf;
//класс кнопок
class button
{
public:
//имя файла
String File;
//изображение, текстура и спрайт
Image image;
Texture texture;
Sprite sprite;
//конструктор
button(int red, int gre, int blu, int ared, int agre, int ablu, int x, int y, int xpo, int ypo, String F)
{
File = F;
image.loadFromFile(“res/”+ File);
texture.loadFromImage(image);
sprite.setTexture(texture);
sprite.setTextureRect(IntRect(0,0,xs,ys));
sprite.setScale(xs, ys);
sprite.setPosition(xpos,ypos);
sprite.setColor(Color(r,g,b, 200));
r = red; g = gre; b = blu;
ar = ared, ag = agre, ab = ablu;
xs = x; ys = y; xpos = xpo; ypos = ypo;
}
//функция, ставящая кнопку в норм. состояние
void Normal()
{
sprite.setColor(Color(r,g,b, 200));
}
//ставит кнопку в нажатое состояние
void Active()
{
sprite.setColor(Color(ar,ag,ab, 200));
}
private:
//скейл по икс и игрек
int xs, ys;
//RGB в обычном состоянии
int r,g,b;
//RGB в нажатом состоянии
ar, ag, ab;
//координаты кнопки
xpos, ypos;
};
int main()
{
//создание кнопки
button rightButton(50,50,50,80,80,80, 150, 150, 450, 700, “button.png”);
RenderWindow renderWindow(VideoMode(2340, 1080), “window”);
while (renderWindow.isOpen())
{
Event event;
while (renderWindow.pollEvent(event))
{
if (event.type == Event::EventType::Closed)
{
renderWindow.close();
}
}
renderWindow.clear(Color::White);
//отрисовка кнопки renderWindow.draw(rightButton.sprite);
renderWindow.display();
}
return 0;
}