Texturen via Iterator durchgehen will nicht so recht
-
Hallo allerseits.
Zurzeit bin ich dabei mich mit DirectX und C++ zu beschäftigen.
Momentan schreibe ich mir gerade einige Klassen um den Umgang besser zu erlernen und mögliche Spiele dadurch auch schneller auf die Reihe zu bekommen.Bei meiner Sprite Klasse gibt es nun leider einen für mich merkwürdigen Fehler:
Ich habe mir gedacht, dass ich für die Texturen eine map anlege mit Bildnamen + Textur halt.
Nun habe ich eine Kollisionsfunktion geschrieben und möchte die per Parameter angegebene Texture testen, ob sie mit den anderen Texturen kollidiert ist.
Doch scheinbar meldete er mir einen Fehler wenn ich mir den Texturnamen der aktuellen Textur in der Schleife holen möchte, er sagt mir entweder beim if-Vergleich einen FehlerSprite.cpp(185) : error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::string' (or there is no acceptable conversion)
und wenn ich den if vergleich auskommentiere springt er zur functional Datei des Compilers.
Kann mir keinen Reim drauf machen, was mein Fehler sein könnte, daher hier mal der komplette Funktionscode, hoffe ihr könnt mir weiter helfen.bool Sprite::collision(string name) { /* Holt die Textur sofern sie existiert, mit true wird bei Nicht-existenz ein Exception geworfen */ this->getTexture(name, true); int radius_x = static_cast<int>(this->_images_width[name] / 2); int radius_y = static_cast<int>(this->_images_height[name] / 2); int center_x = static_cast<int>((this->_position[name]).x + radius_x); int center_y = static_cast<int>((this->_position[name]).y + radius_y); string texture_name; map<string, LPDIRECT3DTEXTURE9>::iterator it; for (it = this->_images.begin(); it != this->_images.end(); it++) { texture_name = it->first; // Hier tritt der Fehler auf if (name == texture_name) { continue; } int r_x = static_cast<int>(this->_images_width[texture_name] / 2); int r_y = static_cast<int>(this->_images_height[texture_name] / 2); int c_x = static_cast<int>((this->_position[texture_name]).x + r_x); int c_y = static_cast<int>((this->_position[texture_name]).y + r_y); int offset_x = abs(center_x + c_x); int offset_y = abs(center_y + c_y); if (offset_x < (radius_x + r_x) && offset_y < (radius_y + r_y)) { return true; } } return false; }