2D Collision
Archives Forums/Blitz3D SDK Programming/2D Collision
| ||
High there, I am using something similar to the SDK so I think I am in the right place, basically I've got a wrapped c++ version of Blitzmax and I'm having problems with basic collisions within a class, i.e. comparing itself with other objects created by using an iterator to scroll through a list, I've converted the rectsOverLap function. In Bmax the way you stop an object from comparing itself with itself is:If obj:TObject <> Self Then Do collision Here is my code at the moment which simply draws a rectangle for every player created and in the update() it's looking through the list do a rects overlap, but it's not working, I think it's the if(*iter ? ! this : false), but I'm not sure what to do? using namespace std; class CPlayer { public: CPlayer(double x, double y) { this->m_x = x; this->m_y = y; this->m_list.push_back(this); } virtual ~CPlayer(){} void draw() { ezSetColor(150, 150, 150); ezDrawRect(this->m_x, this->m_y, 32, 32); update(); } double getX() { return this->m_x; } double getY() { return this->m_y; } void update() { list<CPlayer*>::iterator iter; for(iter = this->m_list.begin(); iter != this->m_list.end(); iter++) { double pos_x = (*iter)->getX(); double pos_y = (*iter)->getY(); if(*iter ? !this : false){ if(this->rectsOverlap(this->m_x, this->m_y, 32, 32, pos_x, pos_y, 32, 32)){ ezSetColor(255, 255, 255); ezDrawText("C", this->m_x+5, this->m_y+5); } } } } bool rectsOverlap(double x0, double y0, double w0, double h0, double x2, double y2, double w2, double h2) { if(x0 > (x2 + w2) || (x0 + w0) < x2) {return false;} if(y0 > (y2 + h2) || (y0 + h0) < y2) {return false;} return true; } private: double m_x, m_y; list<CPlayer*> m_list; }; //Write your game/application here void ezRunApp() { ezGraphics(800,600,false); CPlayer player1(40, 40); CPlayer player2(30, 30); while(!ezKeyHit(27)) // Main Loop { ezCls(); player1.draw(); player2.draw(); ezFlip(); } } Thanks |