problem mit klassen
-
vielen dank, nochma ^^
ja, das mit public weiss ich ^^
-
ok, hab noch paar probleme mit den vectoren
also;
kopf der steuerung:void steuerung(vector<cSchuss*>)
un übergabe:
steuerung(&shots);
un dann frage, zum berechnen & zeichnen aller schüsse , woltles es so machen, also der code befindet sich inner main inner spielschleife:
if(!shots.empty()) { vector<cschuss*>::iterator iter = shots.begin(); while(iter != shots.end()) { (*iter)->logik(); (*iter)->grafik(); ++iter; } }
-
Und dein Problem lautet wie?
Ich sag dir mal kurz was ich auf den ersten Blick sehe:
1. Referenz auf den Vektor übergeben.
2. Referenzen übergibt der Compiler automatisch, da muss kein & davor um die Adresse zu erhalten.MfG SideWinder
-
das problem, kurz
der übergabe / bzw. der erwartete übergabewert stimmt nicht
also
void steuerung(vector<cSchuss*>) stimmtnur übergeben einfach ohne & ?!
-
Nein stimmt nicht. Wir haben uns ja auf eine Referenzübergabe geeinigt:
[cpp]
// Deklaration einer Funktion die einen Parameter als Referenz übernimmt
void steuerung (vector<cschuss*>& shots)// Im Gegensatz zu Zeigern sind Referenzen andere Namen für bestehende Variablen
// und nicht Zeiger auf Adressen im Speicher, daher haben wir auch nicht die
// Speicheradresse der Variable mitzuteilen sondern die Variable selbst:
steuerung(shots);
[/cpp]Edit: Ein paar Enter eingefügt damit der Thread nicht horizontal über 3 Bildschirme verläuft.
MfG SideWinder
-
ahhh *leucht* ... mir ging ein licht auf
klar, so isses ^^
vielen dankjetzt hab ich nur noch en verarbeitungs problem, also das mit logik() un grafik() .. weil er arbeit den nächsten schuss erst ab, wenn der vorige fertig is ... aber das is doch, hoffentlich, leicht zu beheben
also, nochma danke
-
ok, nach langen versuchen den fehler zu finden, muss ich mich doch noch ma hier melden ...
und zwar, habe immer noch das problem, das die schüsse nacheinander abgearbeitet werden ...
hier der codeif(!shots.empty()) { vector<cSchuss*>::iterator iter = shots.begin(); while(iter != shots.end()) { if((*iter)->y_pos_schuss > 2) { (*iter)->logik(); (*iter)->grafik(); } ++iter; } }
das ganze befindet sich in der spiel schleife ....
achja, noch eine kleine sache, wie kann ich einzelne / den kompletten vector löschen ?!
mit ?delete (*iter);
-
ich verzweile fast ...
bekomms einfach nicht hin, das die schüsse gleichzeitig abgearbeitet werden ....
irgendwie komm ich nich auf den fehler ...
-
1. Natürlich werden alle Schüsse hintereinander abgearbeitet -> am PC gibt es (außer du hast HT-Technologie, zwei Prozessoren, ...) keine Gleichzeitigkeit. Du kannst im besten Fall erreichen, dass alle Schüsse auf Basis der gleichen Daten berechnet werden und die jeweils neuen Daten erst *nach* dem Durchlauf zählen.
2. Den kompletten Vektor leeren kannst du mit:
vec.clear();
Achtung: In deinem Fall hast du dynamisch erzeugte Objekte in deinem Vektor, das heißt du musst noch für jedes Element vorher delete aufrufen:
vector<cschuss*>::iterator iter = shots.begin(); while(iter != shots.end()) { delete *iter; ++iter; }
3. Einzelne Elemente kannst du über den Iterator löschen (auch hier normalerweise *kein* delete notwendig, da die Resorucen vom Vektor selbst freigegeben werden -> da deine Resourcen aber auf weitere Resourcen zeigen musst du wiederrum selbst Hand anlegen)
// Bei dir also: delete *iter; iter.remove();
MfG SideWinder
-
ok, danke
aber hier nochma (mit kommentaren / fragen)
if(!shots.empty()) // also, wenn "shots" nicht leer ist { iter = shots.begin(); // iter auf anfangsposition setzen while(iter != shots.end()) // solange nicht das ende des vectores erreicht wird { if((*iter)->y_pos_schuss > 2) // der schuss soll nich höher als y = 2 fliegen { (*iter)->logik(); //positionsberechnung für den aktuellen schuss (*iter)->grafik(); //zeichnen des aktuellen schusses } ++iter; //aktuellen schuss ändern } }
so, die funktionen logik() und grafik() sind aber so aufgebaut, das sie pro aufruf, die position nur um 1 verändern, un dem entsprechend müsste das programm doch so laufen:
1. schuss
logik()
grafik()++iter -> 2.schuss
logik()
grafik()usw.
also, müsster er doch eigetnlich alle schüsse "gleichzeitig" ausführen ...
-
*topic wieder hochpush*
sry , aber hab immer ncoh keine lsg gefunden ....
-
*push* (sry)
-
will ja nich nerven ... aber kann mir keiner sagen warum die schüsse nicht richtisch abgearbeitet werden ?! für infos siehe oben bei den code mit kommentaren ...
-
Ja er führt alle Schüsse in dieser Schleife aus. Danach sind alle am selben Stand, ich verstehe aber noch nicht ganz *was* genau nicht ausgeführt wird. Tatsächlich gleichzeitig ist ja auf einem Single-CPU-System nicht möglich
MfG SideWinder
-
ja das mit dem gleichzeitig is mir schon klar ... ( doch isses, mit threads , oder ?)
aber egal ... es muss ja net gleichzeitig sein ...das problem ist, das er den schuss immer erst berechnet wenn der vorherige oben angekommen ist .. sie fliegen nicht "gleichzeitig"
es is glaubig einfacher wenndu dir die exe ma anschaust , hier das game
musst aber die konsolen größe auf 80 x 50 umstellen ....
-
dabei siehste auch gleich noch den 2. aktuellen bug ... das gegnerschiff bleibt stehen wenn man schiesst ^^
-
wollts ma wieder hochschieben ... vllt kann mir jetzt ja jdm helfen
-
auf einen letzten versuch .... *push*