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
C-/C++-Quelltext |
|
1 2 3 4 |
Debug Assertion Failed! [...] Expression: vector subscript out of range [...] |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
// TheBindingOfZyklop.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <SFML/Graphics.hpp> //Einbinden der SFML Lybary #include "Schablone.hpp" #include "player.hpp" #include "projektil.hpp" using namespace std; #include <iostream> int main() { //Fenster erstellen mit x=800, y=600 sf::RenderWindow window(sf::VideoMode(800, 600), "TBoZ"); //Spielertextur laden sf::Texture texturePlayer; texturePlayer.loadFromFile("TexturePlayer.png"); sf::Sprite spritePlayer(texturePlayer); //spritePlayer.setPosition(window.getSize().x / 2, window.getSize().y / 2); //Sprite in der Mitte des Bildschirms platzieren //spritePlayer.setTextureRect(sf::IntRect(17 * 32, 0, 32, 32)); //Spieler erstellen class CPlayer Spieler1; Spieler1.sprite.setTexture(texturePlayer); //Projektil Vektor Array erstellen vector<CProjektil>::const_iterator iter; vector<CProjektil> projektilArray; class CProjektil Projektil1; //Projektil erstellen //Main Loop! do { window.clear(); //Fenster resetten window.draw(Spieler1.sprite); //Spieler "spawnen" //Update Player Spieler1.updatePlayer(); Spieler1.updateMovement(); Spieler1.updateAttack(); //Projektil abfeuern if ((sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) || (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) ) { Projektil1.rect.setPosition(Spieler1.rect.getPosition()); //Projektil bei Spieler spawnen Projektil1.Richtung = Spieler1.Richtung; projektilArray.push_back(Projektil1); //Projektil in Array verfrachten } //Projektile anzeigen int counter = 0; for (iter = projektilArray.begin(); iter != projektilArray.end(); iter++); { projektilArray[counter].updateProjektil(); window.draw(projektilArray[counter].rect); counter++; } window.display(); } while (!sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)); //ESC beendet Programm return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void CProjektil::updateProjektil() { if (Richtung == 1) //Projektil nach RECHTS { rect.move(m_Projektilgeschwindigkeit,0); } if (Richtung == 2) //Projektil nach LINKS { rect.move(-m_Projektilgeschwindigkeit,0); } if (Richtung == 3) //Projektil nach UNTEN { rect.move(0,m_Projektilgeschwindigkeit); } if (Richtung == 4) //Projektil nach OBEN { rect.move(0,-m_Projektilgeschwindigkeit); } } |
Das Problem liegt mit hoher Wahrscheinlichkeit in der for-Schleife oder?
C-/C++-Quelltext |
|
1 2 3 4 5 |
for(iter = container.begin(); iter != container.end(); ++iter) { iter->update(); sfmlWindow.draw(*iter); } |
iter->update();
sfmlWindow.draw(*iter);
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Blaufrosch« (02.04.2016, 22:38)
Wie genau, würde man das in meinem Beispiel jetzt implementieren
Wenn ich das, so in der Art, in mein Programm übernehme spuckt er mit Fehlermeldungen um sich
Edit: Vergessen zu sagen, dass es echt irgendwie hirnrissig ist, da 'nen Counter mitlaufen zu lassen, wenn das doch schon der Iterator macht
Also, danke für den Hinweis
C-/C++-Quelltext |
|
1 2 3 4 5 |
for(int i = 0; iter < container.size(); ++i) { container[i].update(); sfmlWindow.draw(container[i].rect); } |
Diese Transferleistung würde ich gern dir überlassen, zeig doch mal deine for-Schleife.
C-/C++-Quelltext |
|
1 2 |
vector<CProjektil>::iterator iter; vector<CProjektil> projektilArray; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
for (iter = projektilArray.begin(); iter != projektilArray.end(); ++iter); { //projektilArray[counter].updateProjektil(); //window.draw(projektilArray[counter].rect); //counter++; iter->updateProjektil(); window.draw(*iter); } |
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Soweit so gut, du möchtest aber nicht den container zeichnen sondern etwas was der container enthält.
Du könntest auch aufhören, einen Iterator zu benutzen und einfach eine Range-based for-Schleife nutzen.
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Du könntest auch aufhören, einen Iterator zu benutzen und einfach eine Range-based for-Schleife nutzen.
Und das heißt jetzt was? Wie gesagt, bin noch ziemlich unerfahren und kann dementsprechend nicht mit allem etwas anfangen
Werbeanzeige