• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SFML klasa przycisku - tekst

Object Storage Arubacloud
0 głosów
1,124 wizyt
pytanie zadane 12 maja 2016 w C i C++ przez Ivan Maniak (60,650 p.)

Cześć, próbuje stworzyć przycisk w SFML, problem w tym, że nie mogę wyświetlić tekstu [sf::Text] w oknie.

// Button.h
#include <SFML/Graphics.hpp>
#include <Windows.h>
#include "iostream"

class Button: public sf::Drawable, sf::Transformable
{

public:
  Button(std::string text, sf::Font font, int characterSize, sf::Vector2f position);

private:
  sf::Text text;

  //sf::Texture texture;
  //sf::Sprite sprite;

  sf::Vector2f position;

  virtual void draw(sf::RenderTarget &target,sf::RenderStates states) const;
};

// Button.cpp
#include "Button.h"

Button::Button(std::string text, sf::Font font, int characterSize, sf::Vector2f position)
{
  Button::text.setString(text);
  Button::text.setFont(font);
  Button::text.setCharacterSize(characterSize);
  Button::text.setPosition(position.x, position.y);
}

void Button::draw(sf::RenderTarget &target, sf::RenderStates states) const
{
	states.transform *= getTransform();

	target.draw(text);
}

// Wyświetlenie przycisku
private:
  sf::Font font;
// ...
Button b("tekst", font, 30, sf::Vector2f(20, 20));
// ... while
window.draw(b);

Nie mam pojęcia co może być źle i dlaczego on się wyświetla. Czy może ktoś pokierować na odpowiednią drogę?
Robię to samo z sprite i wszystko działa, w czym może być problem? Nie wyświetla się żaden błąd - nic

2 odpowiedzi

+2 głosów
odpowiedź 12 maja 2016 przez daan Pasjonat (17,640 p.)
wybrane 12 maja 2016 przez Ivan
 
Najlepsza

Powinieneś przekazywać sf::Font jako referencje, ew. const ref. Dodatkowo font musi istnieć tak długo jak długo chcesz go używać.

Spróbuj tak :

Button(std::string text, sf::Font& font, int characterSize, sf::Vector2f position);

 

komentarz 12 maja 2016 przez Ivan Maniak (60,650 p.)
Faktycznie, masz rację. Dzięki za pomoc.
+1 głos
odpowiedź 12 maja 2016 przez Grzyboo Nałogowiec (28,860 p.)

A jak ładujesz czcionkę i czy masz ją w katalogu z programem?

 

Poza tym:

Button::text.setString(text)

Zupełnie niepotrzebne jest Button::

komentarz 12 maja 2016 przez Ivan Maniak (60,650 p.)

Czcionka jest załadowana, bo nawet gdy z pliku, w którym wyświetlam przycisk, stworzę tekst i wyświetlę go to wtedy działa.
Sprawdziłem i faktycznie jest to problem czcionki, naprawiłem to dodając w Button.h czcionkę, a w konstruktorze po prostu buttonFont = font, czy jest na to jakiś lepszy sposób?
EDIT: uzyskałem odpowiedz

Button:: jest potrzebne, ponieważ w konstruktorze mam zmienną text, jak i w obiekcie. Więc gdy usunę Button:: to wyskakują błędy std::string has no member...

1
komentarz 12 maja 2016 przez Radfler VIP (101,030 p.)

Nie używaj Button:: tylko this:

this->text.setString(text);
komentarz 12 maja 2016 przez Grzyboo Nałogowiec (28,860 p.)
No tak, rzeczywiście. Myślę jednak, że lepiej zmienić jakoś te nazwy, aby 1. nie mieszały się 2. zwiększyć przejrzystość. No i tak jak wyżej, jak już trzeba to używa się this.
1
komentarz 12 maja 2016 przez Radfler VIP (101,030 p.)

Nie zmieniaj tych nazw. Wskaźnik this w tym przypadku idealnie wskazuje na to, że inicjalizujesz zmienne należące do klasy ich odpowiednikami, które przybyły jako argumenty konstruktora.

Podobne pytania

0 głosów
1 odpowiedź 217 wizyt
pytanie zadane 29 sierpnia 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
0 głosów
0 odpowiedzi 491 wizyt
0 głosów
2 odpowiedzi 98 wizyt

92,579 zapytań

141,432 odpowiedzi

319,662 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...