gpt4 book ai didi

c++ - SMFL - 仅绘制了 2 个对象中的 1 个

转载 作者:行者123 更新时间:2023-11-28 05:25:36 24 4
gpt4 key购买 nike

我在绘制自定义 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()

最佳答案

感谢@AlexMeuer我找到了解决方案。

在我的头文件中,我将我的全局字体设置为 extern sf::Font default_font 但是在我的 main.cpp 中我从未声明过它。

关于c++ - SMFL - 仅绘制了 2 个对象中的 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40592111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com