Textbox mit SFML führt immer zu std::bad_alloc
-
Hallo zusammen, ich wollte in SFML eine Textbox erstellen. Die Klasse sieht so aus:
#include "Textbox.hpp" Textbox::Textbox(std::string id, sf::Vector2f position ,sf::Vector2f size ,std::string defaultstring) { setID(id); mPosition = position; mSize = size; setBlocked(false); mText.setString(defaultstring); mText.setCharacterSize(size.y-8); mIsActive = false; setClicked(false); createGraphic(); } void Textbox::reset() { } void Textbox::createGraphic() { quads = sf::VertexArray(sf::Quads,5); lines = sf::VertexArray(sf::LinesStrip,5); quads[0].position = sf::Vector2f(mPosition.x , mPosition.y); quads[1].position = sf::Vector2f(mPosition.x + mSize.x, mPosition.y); quads[2].position = sf::Vector2f(mPosition.x + mSize.x, mPosition.y + mSize.y); quads[3].position = sf::Vector2f(mPosition.x , mPosition.y + mSize.y); quads[4].position = sf::Vector2f(mPosition.x , mPosition.y); quads[0].color = sf::Color(255,255,255,255); quads[1].color = sf::Color(255,255,255,255); quads[2].color = sf::Color(255,255,255,255); quads[3].color = sf::Color(255,255,255,255); quads[4].color = sf::Color(255,255,255,255); lines[0].position = sf::Vector2f(mPosition.x , mPosition.y); lines[1].position = sf::Vector2f(mPosition.x + mSize.x, mPosition.y); lines[2].position = sf::Vector2f(mPosition.x + mSize.x, mPosition.y + mSize.y); lines[3].position = sf::Vector2f(mPosition.x , mPosition.y + mSize.y); lines[4].position = sf::Vector2f(mPosition.x , mPosition.y); lines[0].color = sf::Color(0,0,0,255); lines[1].color = sf::Color(0,0,0,255); lines[2].color = sf::Color(0,0,0,255); lines[3].color = sf::Color(0,0,0,255); lines[4].color = sf::Color(0,0,0,255); mText.setColor(sf::Color(87,158,56)); TextboxRect = sf::IntRect(mPosition.x,mPosition.y,mSize.x,mSize.y); } void Textbox::update(sf::Event *e, sf::RenderWindow *rw) { updateText(); checkMouseToBox(e,rw); } void Textbox::draw(sf::RenderWindow *rw) { rw->draw(quads); rw->draw(lines); rw->draw(mText); } void Textbox::checkMouseToBox(sf::Event *e,sf::RenderWindow *rw) { if(TextboxRect.contains(static_cast<sf::Vector2i>(sf::Mouse::getPosition(*rw)))) { if(mIsActive == false) { if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) { if(sf::Event::MouseButtonReleased) { mIsActive = true; mText.setString(""); } } } } } void Textbox::checkEnterdText(sf::Event *e,sf::RenderWindow *rw) { if(mIsActive == true) { for (int i = 0; i < 5; ++i) { quads[i].color = sf::Color(212,212,212); } mText.setColor(sf::Color(198,28,28)); if(e->type == e->TextEntered) { std::string name = ""; if (e->text.unicode < 128) { if(e->text.unicode != 13) { name += static_cast<char>(e->text.unicode); mText.setString(mText.getString()+name); } } if(mText.getLocalBounds().width > Textbox::mSize.x) { std::string t; t = mText.getString(); t.resize(t.size()-1); mText.setString(""); mText.setString(t); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::BackSpace)) { std::string temp; temp = mText.getString(); if(temp.size() >= 1) { temp.resize(temp.size()-1); mText.setString(temp); } } } else { mText.setColor(sf::Color(87,158,56)); for (int i = 0; i < 5; ++i) { quads[i].color = sf::Color(255,255,255); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Return)) { mIsActive = false; } } void Textbox::updateText() { mText.setPosition(mPosition.x,mPosition.y+mSize.y/2-mText.getCharacterSize()/2-5); } void Textbox::handle(sf::Event *e,sf::RenderWindow *rw) { checkEnterdText(e,rw); } void Textbox::setPosition(sf::Vector2f position) { mPosition = position; createGraphic(); }Wenn ich sie nun in einer anderen Datei aufrufen möchte:
Textbox *t = new Textbox(...);bekomme ich immer einen Fehler names "C++ exception: std::bad_alloc". Weis jemand evtl. woran das liegt?
-
was sagt der Debugger ?
-
if(mText.getLocalBounds().width > Textbox::mSize.x) { std::string t; t = mText.getString(); t.resize(t.size()-1); // <---------------- nix globb! mText.setString(""); mText.setString(t); }