Xanes Temat założony przez niniejszego użytkownika |
» 2014-10-01 20:46:21 Deklaracja Klasy: #pragma once #include <SFML/Graphics.hpp> #include <iostream> class Button { float posX, posY; sf::Font font; sf::Event event; 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 ); };
Definicja: #include "Button.h"
Button::Button( void ) { this->posX = 50; this->posY = 50; font.loadFromFile( "arial.ttf" ); text.setCharacterSize( 60 ); 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.setOrigin( text.getGlobalBounds().width / 2, text.getGlobalBounds().height / 2 ); <---linijki dodane text.setPosition( posX + body.getGlobalBounds().width / 2, posY + body.getGlobalBounds().height / 2 ); <---linijki dodane this->posX = posX; this->posY = posY; }
screen: http://ifotos.pl/zobacz/zdjciejpg_eqepswa.jpg/ obiekt tworzymy tak: Button start("START",sf::Color::Red,160,280); |
|
colorgreen19 |
» 2014-10-01 21:44:45 text.setPosition( posX + body.getSize().x / 2 - text.getGlobalBounds().width / 2, posY + body.getSize().y / 2 - text.getGlobalBounds().height / 2 ) spróbuj tak |
|
sajmon |
» 2014-10-01 22:05:45 Mi się wydaję, że walisz za dużą czcionkę i ona ma jeszcze marginesy i dlatego jest przesunięta tak dziwnie. Próbowałeś mniejszy rozmiar ? |
|
Glazus |
» 2014-10-01 23:41:14 Hm... A takie rozwiązanie naprawia problem? text.setPosition( posX +( body.getGlobalBounds().width - 20 ) / 2, posY +( body.getGlobalBounds().height - 10 ) / 2 ); |
|
maly |
» 2014-10-02 09:13:19 W sf::Text do prawidłowego ustawienia wycentrowanego origin trzeba brać pod uwagę left i top które nie są w punkcie 0,0. sf::FloatRect rect = text.getLocalBounds(); text.setOrigin( rect.left + rect.width / 2.f, rect.top + rect.height / 2.f ); |
|
CodeMeister |
» 2014-10-02 23:25:05 Sam rowniez spotkalem sie z tym problemem, jutro podrzuce kod z rozwiazaniem. Do Y dodaje lub odejmuje sie bodajze characterSize * 0.25
Nie pamietam dokladnie, jak pisalem jutro moge podac rozwiazanie :) |
|
Xanes Temat założony przez niniejszego użytkownika |
» 2014-10-03 19:12:25 "colorgreen19" Próbowałem tego sposobu zanim pisałem na forum, nie daje rozwiązania mojego problemu. "sajmon" Poczytaj co na początku pisałem. Ja chce aby można było podać każdy rozmiar czcionki od najmniejszej do największej. "Glazus" Niestety myślałem na początku aby tak zrobić ale to też nie jest rozwiązanie mojego problemu. "maly" Dokładnie tak twój sposób okazał się rozwiązaniem dla wszystkich przypadków. :) WIELKIE DZIĘKI !!!
Oto rozwiązanie problemu:
text.setOrigin( text.getGlobalBounds().left+text.getGlobalBounds().width / 2, text.getGlobalBounds().top+text.getGlobalBounds().height / 2 ); text.setPosition( (posX + body.getGlobalBounds().width / 2)-OutlineThicknessValue, (posY + body.getGlobalBounds().height / 2)-OutlineThicknessValue);
OutlineThicknessValue to parametr dla funkcji body.setOutlineThickness(OutlineThicknessValue); który trzeba odjąć aby tekst był idealnie na środku jeśli się go ustawia.
"maly" mam do ciebie jeszcze jedno pytanie nie zabardzo rozumiem o co chodzi z tą funkcją setOrigin i co to są te parametry Left oraz top w obiekcie InRect ?
Wydaje mi się że to pytanie również podpina się pod ten temat ponieważ pozwoli zrozumieć lepiej zaistniały problem.
|
|
maly |
» 2014-10-03 19:34:14 |
|
1 « 2 » 3 |