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

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

1

31.07.2016, 14:24

[SFML] Tilemap aufbau

Hey Leutz,

ich beschäftige mich seit langem mal wieder in SFML.
Für ein kleines Game würde ich gerne eine Tilemap erstellen und verwalten.
Hab ich früher auch schon gemacht ... also kein Problem. Allerdings ist mein Code von früher zum heulen, man lernt halt immer dazu.

Hab mir jetzt folgendes überlegt. Es gibt ein TilemapManager, der die Tilemap verwaltet und dann gibt es noch die Tilemap an sich.
Diese muss dann auch in meinem WindowManager registriert werden zum zeichnen.

Jetzt zu meinem eigentlichem Problem.
Der Windowmanager hat eine Methode registerEntity(sf::Sprite), welche die einzelnen Objekte zum zeichnen registriert. Also hab ich meine Tilemap einfach vom Typ sf::Sprite erben lassen.
Die Tilemap hat allerdings intern trotzdem noch ein sf::Sprite welches das einzelne Tile darstellt. Dann wollte ich eigentlich die Funktion draw überschreiben und in der Funktion draw meine Tilemap zeichnen.

Allerdings stellt sich das nicht so einfach raus, da draw ja als const definiert ist und ich somit das sf::Sprite tile in dieser nicht verändern kann.

Weiß hier leider nicht mehr weiter. Vielleicht ist meine Code Organisation auch für den Arsch.

Gruß
Moritz

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

31.07.2016, 14:50

Weiß hier leider nicht mehr weiter. Vielleicht ist meine Code Organisation auch für den Arsch.

Meiner Meinung nach geht es dort kaputt wo du deine Tilemap von Sprite erben lässt, weil die Vererbung eine ist-Beziehung darstellt, eine Tilemap aber ebend kein Sprite ist, sondern Sprites hat. Wenn du das nur wegen der Draw Methode machst, solltest du dir mal sf::Drawable (http://www.sfml-dev.org/documentation/2.…1_1Drawable.php) angucken.

3

31.07.2016, 14:52

Zitat

Vielleicht ist meine Code Organisation auch für den Arsch.

Jop. ;)
Warum erbst du denn zum Beispiel von sf::Sprite und nicht von sf::Drawable und sf::Transformable?
Das const wirst du aber nicht aus der draw-Methode wegbekommen, entweder du machst das, was du da verändern willst, entsprechend zu einem mutable Objekt oder änderst dein Design mal grundlegend, was nach was besserem klingt...

MfG
Check

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

4

31.07.2016, 16:02

Naja das ganze war ursprünglich ein sf::Drawable, allerdings konnte ich das nicht meinem sf::Sprite Drawcontainer hinzufügen, eventuell ist das mit dem container wo neue drawablew hinzugefügt oder nicht mehr benötigte entfernt werden doch nicht so die super Idee?

5

31.07.2016, 17:01

Was denn für einen Drawcontainer?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
sf::Sprite sprite0(texture0);
sf::Sprite sprite1(texture1);

std::vector<sf::Drawable*> drawcontainer;
drawcontainer.push_back(&sprite0);
drawcontainer.push_back(&sprite1);

for(const auto& d : drawcontainer)
    rendertarget.draw(*d);

Meinst du so was? Funktioniert doch dufte...

MfG
Check

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

6

31.07.2016, 21:44



Meinst du so was? Funktioniert doch dufte...



Genau so etwas meinte ich, allerdings hatte ich statt Pointern nur ein sf::Drawable an sich bekommen, dass wollte der Compilier dann leider nicht bei der Übergabe haben :dash:
Mit pointern geht es allerdings :thumbsup:

Jetzt nur noch die Frage, gibt es irgend eine nicht zu unschöne Möglichkeit über das draw meine Tilemap zu zeichnen ?
Als alternative Möglichkeit hatte ich mir überlegt zusätzlich zu meinem sf::Drawable* Container noch ein Funktionspointercontainer zu speichern. Und in diesem wird dann eine Funktion von Tilemap gespeichert die das ganze dann zeichnet.
Ob das allerdings schön und elegant ist bezweifele ich.

Wie würde man das denn am besten handeln ?

Gruß
Moritz

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

31.07.2016, 22:02

Du hast doch die draw Methode. Pack da den Code doch rein. Deshalb erbst du doch von sf::drawable. Ich verstehe das Problem jetzt nicht ganz.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

moritz31

Treue Seele

  • »moritz31« ist der Autor dieses Themas

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

8

31.07.2016, 22:19

Hey,

hab das ganze jetzt über mutable gelöst, dadurch kann ich in der draw funktion immer noch auf Sprite zugreifen.
Würde irgendwas dagegen sprechen das ganze so zu lassen ? Oder bekomme ich mit mutable früher oder später Probleme?

9

31.07.2016, 22:50

Zeig am besten mal einen Codeausschnitt, dann kann man dir besser folgen.

10

01.08.2016, 06:55

Klingt nach keiner sauberen Lösung.
Am besten so wie Techel schon sagt Code Zeigen.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige