在 C++ 中压缩代码时遇到问题 - SFML
Trouble condensing code in C++ - SFML
这听起来可能是个愚蠢的问题...
我有一段使用 SFML 库的 C++ 代码:
#include <SFML/Graphics.hpp>
#include <string>
void textDisplay(sf::Text& display_text, std::string display_str, sf::Font display_font, int char_size) {
display_text.setString(display_str);
display_text.setFont(display_font);
display_text.setCharacterSize(char_size);
display_text.setStyle(sf::Text::Regular);
}
int main() {
sf::RenderWindow window(sf::VideoMode(400, 400), "Game");
sf::Font arial;
if (!arial.loadFromFile("fonts/arial/arial.ttf")) {
return 0;
}
sf::Text text;
textDisplay(text, "Hello, World!", arial, 30);
sf::CircleShape shape(100.f, 10);
shape.setFillColor(sf::Color::Yellow);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
window.clear();
window.draw(text);
window.display();
}
return 0;
}
因为当我尝试将文本显示到 SFML 屏幕上时,我将一遍又一遍地重复相同的四行代码,而不是重复代码,所以我创建了一个函数 (textDisplay
) 接收四个参数(Text
对象本身、字符串、字体和字符大小)并为我初始化 Text
对象。
由于某种原因,文本没有显示 - 是不是我做错了什么?
一些东西:
- window被称为
window
。
- 编译的时候没有报错,不知道哪里报错了
- 板本身是黑色的,
window
上没有文字。
如果错误与函数本身有关,您能否推荐一种替代方法来一遍又一遍地键入相同的四行代码?
找到了,您正在使用临时字体设置文本,因为它是一个普通变量而不是 reference/pointer:
void textDisplay(sf::Text& display_text, std::string display_str, sf::Font& display_font, int char_size) { //Just make it a reference and its done! :)
display_text.setString(display_str);
display_text.setFont(display_font);
display_text.setCharacterSize(char_size);
display_text.setStyle(sf::Text::Regular);
}
这听起来可能是个愚蠢的问题...
我有一段使用 SFML 库的 C++ 代码:
#include <SFML/Graphics.hpp>
#include <string>
void textDisplay(sf::Text& display_text, std::string display_str, sf::Font display_font, int char_size) {
display_text.setString(display_str);
display_text.setFont(display_font);
display_text.setCharacterSize(char_size);
display_text.setStyle(sf::Text::Regular);
}
int main() {
sf::RenderWindow window(sf::VideoMode(400, 400), "Game");
sf::Font arial;
if (!arial.loadFromFile("fonts/arial/arial.ttf")) {
return 0;
}
sf::Text text;
textDisplay(text, "Hello, World!", arial, 30);
sf::CircleShape shape(100.f, 10);
shape.setFillColor(sf::Color::Yellow);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
window.clear();
window.draw(text);
window.display();
}
return 0;
}
因为当我尝试将文本显示到 SFML 屏幕上时,我将一遍又一遍地重复相同的四行代码,而不是重复代码,所以我创建了一个函数 (textDisplay
) 接收四个参数(Text
对象本身、字符串、字体和字符大小)并为我初始化 Text
对象。
由于某种原因,文本没有显示 - 是不是我做错了什么?
一些东西:
- window被称为
window
。 - 编译的时候没有报错,不知道哪里报错了
- 板本身是黑色的,
window
上没有文字。
如果错误与函数本身有关,您能否推荐一种替代方法来一遍又一遍地键入相同的四行代码?
找到了,您正在使用临时字体设置文本,因为它是一个普通变量而不是 reference/pointer:
void textDisplay(sf::Text& display_text, std::string display_str, sf::Font& display_font, int char_size) { //Just make it a reference and its done! :)
display_text.setString(display_str);
display_text.setFont(display_font);
display_text.setCharacterSize(char_size);
display_text.setStyle(sf::Text::Regular);
}