Xanes Temat założony przez niniejszego użytkownika |
SMFL 2.1 GUI Tworzenie klasy przycisków problem z umieszczeniem tekstu na środku przycisku. » 2014-09-29 22:08:01 Witam, tak jak w temacie jestem w trakcie tworzenia prostej klasy przycisków. Ma ona działać tak aby po wprowadzeniu dowolnego tekstu o dowolnym rozmiarze stworzyła prostokąt z obramowaniami o 20 jednostek dłuższy i 10 jednostek szerszy a w środku ma być podany tekst. Niestety próbowałem próbowałem różnych sposobów i zawsze przy pewnych wymiarach rysuje mi się cześć tekstu poza obszarem obramowań przycisku.
Ktoś jest wstanie mi coś podpowiedzieć jak to zrobić? |
|
colorgreen19 |
» 2014-09-29 22:13:09 a może kod twojego dotychczasowego programu? |
|
Xanes Temat założony przez niniejszego użytkownika |
» 2014-09-29 22:19:59 Wybacz mi ;)
Oto deklaracja klasy:
#pragma once #include <SFML/Graphics.hpp> #include <iostream> class Button { float posX,posY; sf::Font font; sf::RectangleShape body; sf::Text text; sf::Vector2i posMouse;
public: Button(void); Button::Button(const sf::String &ButtonText,sf::Color TextColor,const float posX,const float posY); void draw(sf::RenderWindow &ok);
Button::Button(void) { this->posX = 50; this->posY = 50; font.loadFromFile("arial.ttf"); //ładowanie czcionki text.setCharacterSize(60);//rozmiar czcionki text.setFont(font); text.setString("BUTTON"); body.setSize(sf::Vector2f(((text.getGlobalBounds().width)+20),(text.getGlobalBounds().height)+10)); body.setOutlineThickness(5); body.setOutlineColor(sf::Color::White); body.setFillColor(sf::Color::Black); body.setPosition(posX,posY); text.setColor(sf::Color::White); text.setPosition(posX+8.5,posY-10); }
Button::Button(const sf::String &ButtonText,sf::Color TextColor,const float posX,const float posY) { font.loadFromFile("arial.ttf"); text.setCharacterSize(60); text.setFont(font); text.setString(ButtonText); body.setSize(sf::Vector2f(((text.getGlobalBounds().width)+20),(text.getGlobalBounds().height)+10)); body.setOutlineThickness(5); body.setOutlineColor(sf::Color::White); body.setFillColor(sf::Color::Black); body.setPosition(posX,posY); text.setColor(TextColor); text.setPosition(posX+8.5,posY-10); this->posX = posX; this->posY = posY; }
void Button::draw(sf::RenderWindow &window) { window.draw(body); window.draw(text); }
Generalnie kot jest napisany tak aby napis był ładnie wyśrodkowany kiedy czcionka textu wynosi 60 a ja bym chciał aby przy każdej możliwej czcionce tekst był na środku w prostokącie dłuższym o 20 jednostek i o 10 jednostek szerszym. |
|
MrPoxipol |
» 2014-09-29 22:37:36 Kurs STC to podstawa. text.setPosition( posX + 8.5, posY - 10 ); |
Skoro dodajesz padding 20px i 10 to, żeby wycentrować musisz dodać połowy (10, 5). |
|
Xanes Temat założony przez niniejszego użytkownika |
» 2014-09-29 22:44:51 No ale nie działa :P Gdyby to było takie proste to nie zakładał bym tego tematu :P |
|
Glazus |
» 2014-09-29 23:27:55 Dodaj: text.setOrigin( text.getGlobalBounds().width / 2, text.getGlobalBounds().height / 2 ); I teraz tylko jako pozyscję text podaj środek przycisku i powinno być dokładnie tak jak chcesz. |
|
Xanes Temat założony przez niniejszego użytkownika |
» 2014-10-01 19:49:29 Dodałem dwie linijki
text.setOrigin( text.getGlobalBounds().width / 2, text.getGlobalBounds().height / 2 ); text.setPosition(posX+body.getGlobalBounds().width / 2,posY+body.getGlobalBounds().height / 2);
i dalej nic. |
|
colorgreen19 |
» 2014-10-01 20:24:03 podaj może screena jak to u ciebie wygląda, co jest źle i podaj pełen kod programu ( tworzenie obiektu przycisku, definicja klasy przycisku), gdzie dodałeś te linijki |
|
« 1 » 2 3 |