000
27.05.2003, 10:33 Uhr
B.o.o.M
|
Ich Programmiere gerade an nem LunarLander-Klon mit OpenGL. Die Koordinatenpunkte der Landschaft werden am Anfang aus einer Datei (MilkShapeASCII) gelesen und in einem Vektor gespeichert.
Die Klasse für das alles sieht so aus:
C++: |
#ifndef MAP_H #define MAP_H
#include <vector>
struct point { float p[3]; point(){}; point(float x, float y, float z){ p[0] = x; p[1] = y; p[2] = z; }; float& operator[](int i){ return p[i]; }; };
class clMap { public: bool LoadMShape (char* pFilename); //Map laden int MapPoints () { return(vMap.size()); }; //Anzahl Mappunkte float MapPoint (int p, int n) { return(vMap[p][n]); }; //Wert des Mappunktes
private: int iV; //Mappunkte vector<point> vMap; //Map Vektor
float tmp1, tmp2; //Zwischenspeicher char sBuffer [60]; //Lesebuffer char sX[9], sY[9]; };
#endif
|
Mit MapPoint kann ich mit dann die einzelnen Punkte abholen, in der ersten Klammer die Nummer des Punktes und in der zweiten den Wert für x oder y Achse (z ist so halb eingebaut wird aber vorerst noch nicht verwendet).
Nun zu meinem Problem, in der Klasse zur Verarbeitung des kompletten Spielablaufs wird die Kollisionsabfrage gemacht, rpt die Werte aus dem Vektor an die Kollisionsklasse weitergeleitet.
Spielverarbeitung, Aufruf der Kollisionsabfrage und übergabe der Daten:
C++: |
//Killision abfragen for(int x=0; x<Map->MapPoints()-1; x++) { int c=Map->MapPoint(x,0); c=Map->MapPoint(x,0); c=Map->MapPoint(x,0); c=Map->MapPoint(x,0); c=Map->MapPoint(x,0);
char cKollision, cKoll1, cKoll2;
cKoll1 = CollisionEngine.VP_Collision(Ship->S_fX_Position+0.25f, Ship->S_fY_Position, Map->MapPoint(x,0), Map->MapPoint(x,1), Map->MapPoint(x+1,0) - Map->MapPoint(x,0), Map->MapPoint(x+1,1) - Map->MapPoint(x,1)); ... ... ... ...
|
Kollisionsabfrage, hier sollten die Werte aus dem Vektor ankommen:
C++: |
char clCollisionEngine::VP_Collision (float fS_X, //Schiff-Ausgangspunkt float fS_Y, float fP_X, //Polygon-Ausgangspunkt float fP_Y, float fP_dX, //Richtung des Polygonvektors float fP_dY) { const int n=MATRIXSIZE;
double a[n][n]; // n*n Matrix double b[n],x[n]; // Vektor der rechten Seite und Loesungsvektor
float fS_dX=0.0f, //Distant des Schiffpunktes vom Polygon-Ausgangspunkt fP_pY=0.0f, //Y-Wert des Poligonvektorpunktes an Punkt mit der Verschibung des Schiff-X-Wertes r=0.0f; //Faktor
if (fP_X <= (fS_X) && (fS_X) <= (fP_X+fP_dX)) { ... ... ... ...
|
Soweit schön und gut, nur hab ich jetzt das Problem, dass der Wert der X-Achse falsch in der Kollisionsabfrage ankommt, rpt. beim ersten mal richtig und dann immer um den gleichen Wert verändert. Die Y-Achse funktioniert normal. Auf den Vektor greife ich nur da und vor allem nur über die MapPoint()-Methode zu und ändere den somit nicht. Beim beenden des Programmes kommt ausserdem eine "Access voilation" und der cursor springt auf eine Zeile in der memory.stl:
C++: |
void deallocate(pointer p, size_type) { ::operator delete(p); <----- Hier kommt der Fehler } size_type max_size() const _RWSTD_THROW_SPEC_NULL { return 1 > UINT_MAX/sizeof(T) ? size_type(1) : size_type(UINT_MAX/sizeof(T)); } inline void construct(pointer p, const T& val);
inline void destroy(T* p); ... ... ... ...
|
Ich weiss absolut nicht wo ich mit Fehlersuchen beginnen soll. Irgendwas stimmt mit dem Vektor nicht, hatte das anfangs mit einem Array und da hat noch alles funktioniert.
tschö -- Beschichtet mit reinstem Salz aus heiligen Höhlen, von einem erleuchteten Yogi gegessen, wieder ausgeschwitzt, rekristalisiert, abgepackt, verschickt und von katholischen Jungfrauen im Zustand der Gnade auf diesen klebefähigen Polymerstrip aufgebracht. Dieser Post wurde am 27.05.2003 um 10:36 Uhr von B.o.o.M editiert. |