Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

1

22.06.2013, 15:33

[SFML] Farbe als Argument übergeben

Ich hab nun eine player-Klasse mit einem Konstruktor, bei dem eine Farbe übergeben werden soll. In der Klasse wird ein sf::Rectangleshape erstellt, das dann die übergebene Farbe haben soll. Nur weiß ich nicht, wie ich das hinbekomme. Ich habe in der Klasse jetzt sowas in der Art:

player(sf::Color)
{
sf::RectangleShape rect(32,32)
rect.setcolor(???)
}

Ich kann ja keine Instanz erstellen lassen, da eine spezifische Farbe (zB. sf::Color::Red) kein Typname ist. Hoffentlich versteht ihr, was ich meine. Ich müsste es irgendwie hinbekommen, dass die Farbe geändert werden kann. Danke :)

wluc-16

Treue Seele

Beiträge: 212

Wohnort: in der Nähe von Bielefeld :D

Beruf: Schüler

  • Private Nachricht senden

2

22.06.2013, 15:40

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
player(sf::Color color)

{

sf::RectangleShape rect(32,32)

rect.setcolor(color)

}


Und dann später:

C-/C++-Quelltext

1
player p(sf::Color::Red);


Wenn ich dich richtig verstanden habe ?(

Hoffe ich konnte helfen :D

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

3

22.06.2013, 15:41

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Player
{
public:
    Player(const sf::Color& color) :
        m_rect(32, 32)
    {
        m_rect.setColor(color);
    }
private:
    sf::RectangleShape m_rect;
}

int main()
{
    Player p1(sf::Color::Red);
}


Hier übergibst du dem Konstruktor der Player Klasse die Farbe sf::Color::Red, was equivalent ist mit sf::Color(255, 0, 0). Im Konstructor wird dann die Membervariable m_rect in der Initialisierungsliste initialisiert mit der Grösse 32x32 und danach wird noch die per const reference übergebene Farbe gesetzt. :)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

4

22.06.2013, 17:38

Gut, danke. Sowas hab ich auch schon vorher versucht, trotzdem wollte es nicht funktionieren, aber jetzt gehts. Noch eine Frage, vielleicht kann ich ja was dazu lernen:

"Player(const sf::Color& color) :
m_rect(32, 32)
"
Das const ist klar. Nur wann sollte man eine Referenz benutzen und wann nicht? Und das mit dem Doppelpunkt hab ich ja noch nie gesehen. Was bedeutet das? Vielleicht, dass sich das eine auf das andere bezieht? Ich hab Doppelpunkte bisher nur an anderen Stellen erlebt :D. Aber ich bin ja erst so mit den Grundlagen durch.

wluc-16

Treue Seele

Beiträge: 212

Wohnort: in der Nähe von Bielefeld :D

Beruf: Schüler

  • Private Nachricht senden

5

22.06.2013, 19:17

Bei Objekten die ab 12 Bytes, würde ich sagen lohnt es sich eine Referenz anzuwenden (int = 4 Bytes, sf::Color = 4 x int).
Korrigiert mich, wenn ich falsch liege :D

Der Doppelpunkt ermöglicht eine schnelle (;)) Initialisierung im Konstruktor:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
class Bla
{
private:
   int _wert;

public:
      Bla(int wert)  : _wert(wert) // _wert wird jetzt schon mit wert initialisiert, weshalb der Konstruktor sozusagen leer ist
   {
   }
      ~Bla()
   {
   }
};

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »wluc-16« (22.06.2013, 19:43)


6

22.06.2013, 19:39

Der Doppelpunkt ermöglicht überhaupt erst mal eine Initialisierung "im" (eher vor dem) Konstruktor.
Versuch mal ein Objekt ohne Standardkonstruktor einer Klasse hinzufügen. Kein Pointer!
So ein Fall schreit nach der Initialisierungsliste, die generell verwendet werden sollte. ;)

MfG
Check

Werbeanzeige