c++ sfml Ошибка прав доступа при попытки отрисовать текст
у меня есть класс: кнопка "RectButton" проблема в том что в этом классе есть текст который нужно отрисовать когда ты напрямую обращаешься из главного потока к объекту и передаешь окно то все работает, но если поставить посредника между ними у меня это класс:меню "GeneralMenu" который как бы должен управлять этими кнопками, и тут появляется ошибка доступа. Примечание в классе RectButton используеться шрифт chocolate.ttf его нужно добавить в папку с проектом, без него текст вообще не выводиться на экран
Ошибка:
Вызвано исключение по адресу 0x00007FFEE19969DB (sfml-graphics-d-2.dll) в MODRadar.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFFFFFFFFFF.
Код программы:
#include <SFML\Graphics.hpp>
#include <stdio.h>
#include <iostream>
#include <thread>
#include <windows.h>
#include "psapi.h"
float area(sf::Vector2f a, sf::Vector2f b, sf::Vector2f c) {
return abs((a.x - c.x) * (b.y - c.y) + (b.x - c.x) * (c.y - a.y));
}
bool inTriangle(sf::Vector2f a, sf::Vector2f b, sf::Vector2f c, sf::Vector2f d) {
if (area(a, b, c) == area(a, b, d) + area(a, d, c) + area(b, d, c)) {
return true;
}
return false;
}
//Класс реализующий кнопку
class RectButton {
sf::RectangleShape button;
sf::Font font;
sf::Text text;
sf::Color color[2];
float posX, posY, sizeX, sizeY;
public:
bool active = false;
RectButton() {}
RectButton(float posX, float posY, float sizeX, float sizeY, char* text, sf::Color color) {
this->posX = posX;
this->posY = posY;
this->sizeX = sizeX;
this->sizeY = sizeY;
this->color[0] = color;
button.setFillColor(color);
button.setPosition(sf::Vector2f(posX, posY));
button.setSize(sf::Vector2f(sizeX, sizeY));
if (!font.loadFromFile("chocolate.ttf")) {
std::cout << "ERROR FONT" << std::endl;
}
this->text.setFont(font);
this->text.setString(text);
this->text.setFillColor(sf::Color::White);
this->text.setStyle(sf::Text::Bold | sf::Text::Underlined);
this->text.setPosition(sf::Vector2f(posX, posY));
CorrectText();
}
void CorrectText() {
std::string str = text.getString();
int n = str.length();
int i = 100;
while (text.findCharacterPos(n).x > button.getPosition().x + button.getSize().x) {
text.setCharacterSize(i);
i--;
if (i < 0) {
break;
}
}
}
bool is_Hovered(sf::RenderWindow& window) {
sf::Vector2f pos = (sf::Vector2f)sf::Mouse::getPosition(window);
sf::Vector2f pos1 = button.getPoint(0) + button.getPosition();
sf::Vector2f pos2 = button.getPoint(1) + button.getPosition();
sf::Vector2f pos3 = button.getPoint(2) + button.getPosition();
sf::Vector2f pos4 = button.getPoint(3) + button.getPosition();
if (inTriangle(pos1, pos2, pos3, pos)) {
return true;
}
if (inTriangle(pos1, pos4, pos3, pos)) {
return true;
}
return false;
}
void setColorBack(float R, float G, float B, float A) {
button.setFillColor(sf::Color(R, G, B, A));
}
void Activate() {
if (active) {
active = false;
Sleep(300);
}
else {
active = true;
Sleep(300);
}
}
sf::Text getText() {
return text;
}
void draw(sf::RenderWindow& window) {
window.draw(button);
window.draw(text);
}
};
class GeneralMenu {
sf::Texture texture[2];
sf::Sprite sprite[2];
sf::Texture texture1;
sf::Sprite sprite1;
sf::RectangleShape MenuBackGround;
float posX, posY;
public:
RectButton button;
GeneralMenu(float x, float y) {
posX = x;
posY = y;
MenuBackGround.setPosition(sf::Vector2f(x, y));
MenuBackGround.setSize(sf::Vector2f(700, 500));
MenuBackGround.setFillColor(sf::Color::Black);
button = RectButton(posX, posY, 100, 300, (char*)"AIMBOT", sf::Color::Red);
}
void draw(sf::RenderWindow& window) {
window.draw(MenuBackGround);
button.draw(window);
}
};
GeneralMenu menu = GeneralMenu(30.0, 75.0);
int main() {
sf::RenderWindow window(sf::VideoMode(770,770), "MOD RADAR");
RectButton buttons = RectButton(0, 0, 100, 300, (char*)"TEXT",
sf::Color::Red);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event))
//Закрытие окна
if (event.type == sf::Event::Closed ||
sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) {
window.close();
}
window.clear(sf::Color::Black);
//тут отрисовка работает
buttons.draw(window);
//Тут классе RectButton выскакивает ошибка
menu.draw(window);
window.display();
}
return 0;
}