Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Komisches Vektorproblem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.05.2003, 09:00 Uhr
B.o.o.M



Kann mir hier wirklich niemand helfen oder nen Tipp geben?!
Oder ne Möglichkeit wie ich das auch noch lösen kann würde mir auch helfen. Es müssen einfach Koordinatenpunkte (3d) dynamisch gespeichert werden.

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 28.05.2003 um 09:00 Uhr von B.o.o.M editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.05.2003, 20:43 Uhr
~KravenZ
Gast


Versuch es mal auf dem www.games-net.de Board. Da geht es ausschliesslich um Games etc.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: