SMFL — только 1 из 2 объектов рисуется

У меня проблемы с рисованием sf::Drawable производный объект.

//Textbox.h
#pragma once
#include "Header.h"
#ifndef TEXTBOX_H
#define TEXTBOX_H

class Textbox : public Drawable {
public:
Textbox(int max_chars, bool numeric);
Textbox(int max_chars);
Textbox(bool numeric);
Textbox();

void setTextColor(Color color);

void setPosition(float x, float y);

Vector2f getPosition() {
return m_gshape.getPosition();
}

Vector2f getSize();

String getString();

void setFocus(bool value);

bool isFocused();

void input(Uint32 text_char);

void clear();private:
virtual void Textbox::draw(sf::RenderTarget& target, sf::RenderStates states) const {
target.draw(m_gshape, states);
target.draw(m_textbox, states);
}unsigned int max_length;
int min_ascii = 32;
int max_ascii = 127;
bool focus;
string content;

Text m_textbox;
RectangleShape m_gshape;
};#endif // !TEXTBOX_H

А также

//Textbox.cpp
#pragma once
#include "Textbox.h"
Textbox::Textbox(int max_chars, bool numeric) {
max_length = max_chars;
m_gshape.setSize(Vector2f(6 + 15 * max_length, 30));
m_gshape.setFillColor(Color::White);
m_gshape.setOutlineThickness(2);
m_gshape.setOutlineColor(Color(60, 60, 60));
m_gshape.setPosition(0, 0);

m_textbox.setFont(default_font);
m_textbox.setCharacterSize(25);
m_textbox.setFillColor(Color::White);

if (max_chars > 1)
m_textbox.setString(to_string((int)pow(10, max_chars - 1)));
else
m_textbox.setString("0");

if (numeric) {
min_ascii = 47;
max_ascii = 58;
}
}
Textbox::Textbox(int max_chars) : Textbox(max_chars, false) {}
Textbox::Textbox(bool numeric) : Textbox(2, numeric) {}
Textbox::Textbox() : Textbox(2, false) {}

void Textbox::setTextColor(Color color) {
m_textbox.setFillColor(color);
}

void Textbox::setPosition(float x, float y) {
FloatRect textbox_bounds = m_textbox.getGlobalBounds();

m_gshape.setPosition(x, y);
m_textbox.setPosition(m_gshape.getPosition().x + (m_gshape.getSize().x - textbox_bounds.width) / 2 - textbox_bounds.left,
m_gshape.getPosition().y + (m_gshape.getSize().y - textbox_bounds.height) / 2 - textbox_bounds.top);
}

Vector2f Textbox::getSize() {
return m_gshape.getSize();
}

String Textbox::getString() {
return m_textbox.getString();
}

void Textbox::setFocus(bool value) {
focus = true;
}

bool Textbox::isFocused() {
return focus;
}

void Textbox::input(Uint32 text_char) {
content = m_textbox.getString().toAnsiString();

if (text_char == 13) {
focus = false;
return;
}
if (m_textbox.getString().getSize() < max_length) {
if (text_char > min_ascii && text_char < max_ascii) {
m_textbox.setString(m_textbox.getString() + text_char);
}
}
if (text_char == 8 && m_textbox.getString().getSize() > 0) {
content.resize(m_textbox.getString().getSize() - 1);
m_textbox.setString(content);
}
}

void Textbox::clear() {
m_textbox.setString("");
}

Все работает, кроме рисования: пока g_shape рисуется и отображается m_textbox не делает. Я уверен в этом, потому что я все еще могу редактировать текст, однако он не отображается.

Я должен признать, что я не полностью понял sf::Drawable наследование и, следовательно, я не уверен, что переопределил draw() правильно.

0

Решение

Благодаря @AlexMeuer Я нашел решение.

В моем заголовочном файле мой глобальный шрифт был установлен как extern sf::Font default_font Однако в моем main.cpp Я никогда не заявлял об этом.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]