为什么两个相同的字符串在字母之间有不同的空间大小?

问题描述 投票:0回答:0

我做了一个应该重现那个游戏的程序,“MonkeyType”,你必须在其中写一个特定的文本,如果你犯了一个错误,这个字母变成红色,如果它是好的,这个字母是白色的。

我使用 sfml 制作了一个 sf::Text 对象,它是白色的,如果它是好的,我拿走字母,如果它是错误的,我拿一个空格,我用红色的文本做同样的事情,使相反的.

我用相同的坐标绘制它们。

我使用的是等宽字体,所以字母大小应该不是问题,但随着文本变大,红色文本似乎向左移动。所以字母最终被叠加了。

我有一个类 Mot,它有一个字符串字段和一个用于向该字符串添加字母的方法 ajouterLettre。和一个返回字符串 getMot() 的方法。

class Mot
{
    string orthographe_;
public:
    ...
    void ajouterLettre(char lettre) { orthographe_.push_back(lettre); }
    string getMot() { return orthographe_; }
};
class Phrase
{
    vector<Mot> tabMots_;
public:
        ...
    void ajouterLettre(char lettre);
};

该方法向列表的最后一个单词添加一个字母。

void Phrase::ajouterMot(const Mot& mot) {
    tabMots_.push_back(mot);
}

我正在使用 Monospace 字体。 在 main 函数中,我创建了两个文本,一个是红色的,一个是白色的。 和两个对象短语,构成这些 sf::Text 对象的文本。 (1, false) 参数表示该短语只有一个空词 (Mot)。

sf::Text textecrit1(phraseecrite.tiers(0), font, 24);
    textecrit1.setFillColor(sf::Color::White);
    textecrit1.setPosition(10, 10);

Phrase phraseecrite(1,false);

sf::Text texterreur1("", font, 24);
    texterreur1.setFillColor(sf::Color(255, 0, 0));
    texterreur1.setPosition(10, 10);

Phrase phraserreur(1, false);

phrase 对象有一个文本方法,它返回一个字符串,该字符串对应于由空格分隔的单词列表。

string Phrase::Text() {
    string texte;

    if (tabMots_.size() == 1) {
        texte = tabMots_[0].getMot();
    }

    else{
        int i;
        texte = tabMots_[0].getMot();

        for (i = 1; i < tabMots_.size(); i++) {
            texte = texte + " " + tabMots_[i].getMot();
        }
    }   
    return texte;
}

我有一个 isCorrect 函数,可以判断两个句子(短语)的最后一个字母是否相同。

当用户在键盘上键入一个字母时,短语“phrasecrite”接受该字母,如果正确则使用空格,否则使用字母。 我还更新了渲染 sf::Text

我把它们一个一个地画在另一个上面,这样红色的就覆盖了白色的。 phraseaecrire 是玩家必须匹配的句子。

if (event.text.unicode >= 'a' && event.text.unicode <= 'z') {
    phraseecrite.ajouterLettre( event.text.unicode );

    textecrit1.setString(phraseecrite.Text());

    if (phraseecrite.isCorrect(phraseaecrire1)) {
        phraserreur.ajouterLettre(' ');
    }
    else
    {
        phraserreur.ajouterLettre(event.text.unicode);
    }

即使我在 phraseerreur 中添加一个空格,使它们在字母不正确时处于相同的位置。当文本变大时它会逐渐移动,开始时只是一点点,但当文本很长时它会变大。

string text sfml
© www.soinside.com 2019 - 2024. All rights reserved.