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

TigerClaw25

unregistriert

1

22.11.2013, 09:41

Multimaps

Hallo,

kann mir jemand sagen dazu das std:: bei maps verwendet wird? Also beispiel std::map<String,int > ?

Damit soll man per id z.B "enemy1" die entsprechende Sprite laden. In Kalistas Buch wird das ohne das std:: gemacht und die Tabelle mit make_pair gefüllt. In meinem Beispiel wird kein make_pair verwendet. Bei Vektoren benutzt Kalista auch kein std::

DANKE

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

22.11.2013, 09:46

Das "std::" ist die Angabe eines Namespaces. Um diesen nicht explizit immer angeben zu müssen (manche Entwickler sehen es als Noise an) kann man standardmäßig für die gesamte "Datei" einen Namespace immer als "bereits gewählt" "aktivieren" über
using namespace std;
"std" ist also der Namespace in welchem "map<S,T>" deklariert wurde.
Die Verwendung von make_pair kann sinnvoll sein, bzw. dessen Verwendung kann obligatorisch sein oder eben auch nur fakultativ, je nach Problemstellung:
- map.insert(pair) erfordert ein pair.
- map[key] = value erfordert kein pair.
Beide verhalten sich unterschiedlich.

Wieso das Topic "Multimaps" heißt, das ist mir allerdings nicht ganz klar. Steckt da eventuell noch eine Frage, die ich übersehen habe?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (22.11.2013, 09:52)


TigerClaw25

unregistriert

3

22.11.2013, 10:13

Danke. Das leuchtet mir jetzt ein. Die Überschrift bezog sich auf das Kapitel im Buch.

Im. SDL Buch wurde anscheinend eine andere Methode verwendet, um die Daten in die Tabelle zu schreiben:

std:: map <> p_Textur und dann die Id per p_Textur[id] wobei ID ein stringt ist, übergeben. Vorher wurde irgendwo festgelegt, dass diese Idee den Pfad zur Textur enthält.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

22.11.2013, 10:33

Kannst Du uns allen einen Gefallen tun und deine Beiträge vor dem Abschicken (oder notfalls auch danach) noch einmal durchlesen. Das wäre wirklich hilfreich, denn sie sind fast immer recht schwer verständlich.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

5

22.11.2013, 18:43

Sorry, hier der Code

C-/C++-Quelltext

1
std::map<std::string, SDL_Texture*> m_textureMap;


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool TextureManager::load(std::string fileName, std::string
                          id, SDL_Renderer* pRenderer)
{
    SDL_Surface* pTempSurface = IMG_Load(fileName.c_str());
    if(pTempSurface == 0)
    {
        return false;
    }
    SDL_Texture* pTexture =
        SDL_CreateTextureFromSurface(pRenderer, pTempSurface);
    SDL_FreeSurface(pTempSurface);
    // everything went ok, add the texture to our list
    if(pTexture != 0)
    {
        m_textureMap[id] = pTexture;
        return true;
    }
    // reaching here means something went wrong
    return false;
}



und hier der Aufruf in der Game.cpp:

C-/C++-Quelltext

1
TheTextureManager::Instance()->load("animate-alpha.png", "animate", m_pRenderer);


EDIT: Das heißt also, dass ich meiner Load Funktion für jede Datei einen id-Namen übergeben kann. Und per id-Namen hier "m_textureMap[id] = pTexture;" kann ich dann meine Textur Speichern, jedoch nicht wie bei einem Array per Index sondern per id an irgend ewiner Adresse? Ist etwas ungewohnt, dass das make_pair im Buch einfacher zu verstehen war.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »TigerClaw25« (22.11.2013, 19:03)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

22.11.2013, 18:46

Ich möchte Dir ungern schon wieder auf den Schlips treten, aber ich sehe keine Frage. ;) Ich dachte die bisherigen Unklarheiten bereits geklärt zu haben. Wenn nicht, konkretisiere doch bitte, auf was Du mit dem Code-Ausschnitt hinaus willst.
Eine Map ist übrigens keine Tabelle, sondern eben eine Map. :)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

7

22.11.2013, 20:01

siehe Edit -> Das heißt also, dass ich meiner Load Funktion für jede Datei einen id-Namen übergeben kann. Und per id-Namen hier "m_textureMap[id] = pTexture;" kann ich dann meine Textur Speichern, jedoch nicht wie bei einem Array per Index sondern per id an irgend ewiner Adresse? Ist etwas ungewohnt, dass das make_pair im Buch einfacher zu verstehen war.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

22.11.2013, 20:07

Die ID ist keine Adresse.
Eine Map ordnet einem Schlüssel (in diesem Fall die ID) einen Wert zu (in diesem Fall die Textur).
Man könnte auch einen String als Schlüssel nehmen oder irgendetwas anderes (der Typ muss jedoch bestimmte Voraussetzungen erfüllen, um als Schlüssel in einer Map nutzbar zu sein).

TigerClaw25

unregistriert

9

23.11.2013, 11:09

Danke. Habe noch eine generelle Frage zu Klassen. Wenn ich eine Player Klasse habe, erzeuge ich mir beispielsweise in der game.cpp eine Instanz CPlayer m_Player;

Ich könnte diese doch aber auch direkt in der Player.cpp erzeugen und dann per einbinden der Player.h in der Gameklasse nutzen.

Wenn ich mich nicht irre, wird das bei Singletons so gemacht oder?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

23.11.2013, 12:22

Vergiss einfach mal kurz, dass es Singletons gibt und übergib eine Referenz (oder Kopie, falls das Sinn macht) an alle Klassen und Methoden, die das brauchen. Dazu habe ich auch nicht ganz verstanden, was Du überhaupt meinst. Es riecht allerdings nach globaler Variable oder Singleton und das muss nicht sein. Parameter gibt es aus gutem Grund.

Das hat aber nichts mehr mit dem Thema hier zu tun, oder?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige