Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SMFL 2.1 GUI Tworzenie klasy przycisków problem z umieszczeniem tekstu na środku przycisku.

Ostatnio zmodyfikowano 2014-10-03 23:44
Autor Wiadomość
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ć?
P-117772
colorgreen19
» 2014-09-29 22:13:09
a może kod twojego dotychczasowego programu?
P-117773
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.
P-117775
MrPoxipol
» 2014-09-29 22:37:36
» KursyKurs STC kurs to podstawa.

text.setPosition( posX + 8.5, posY - 10 );
Skoro dodajesz padding 20px i 10 to, żeby wycentrować musisz dodać połowy (10, 5).
P-117778
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
P-117779
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.
P-117785
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.
P-117828
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
P-117832
« 1 » 2 3
  Strona 1 z 3 Następna strona