• Advertisement

Inferno42

Member
  • Content count

    1
  • Joined

  • Last visited

Community Reputation

101 Neutral

About Inferno42

  • Rank
    Newbie
  1. I'm having a bit of trouble with collision in SDL. I've tried Lazy Foo's code and SDL_Collision librarie's. My issue is that when my character moves it detects that he is colliding with all of the tiles. Player.h [source lang="cpp"]#pragma once #ifndef PLAYER_H #define PLAYER_H #include "SDL_collide.h" #include "Graphics_Core.h" #include "Tile_Manager.h" #include "Debug_Overlay.h" namespace Roger { const int ROGER_STANDING = 0; const int ROGER_RUN_LEFT_1 = 1; const int ROGER_RUN_LEFT_2 = 2; const int ROGER_RUN_LEFT_3 = 3; const int ROGER_RUN_RIGHT_1 = 4; const int ROGER_RUN_RIGHT_2 = 5; const int ROGER_RUN_RIGHT_3 = 6; class Player { public: Player(int x, int y); void Move_Left(Tile *tiles[]); void Move_Right(Tile *tiles[]); void Jump(Tile *tiles[]); void Fall(Tile *tiles[]); void Lose_Velocity(); void Draw(); int Cur_x; int Cur_y; private: double max_vel; double cur_vel; SDL_Surface* Run[5]; SDL_Surface* Roger_Sheet; SDL_Rect m_BoundBox; SDL_Rect m_ClippingRect[7]; GraphicManager m_Manager; Debug_Overlay m_DOverlay; int anim_number; }; extern Player CRoger; } #endif // PLAYER_H[/source] Player.cpp [source lang="cpp"]#include "Player.h" #include "System_Core.h" namespace Roger { Player CRoger(450,200); Player::Player(int x, int y) { max_vel = 15.f; cur_vel = 0.f; Cur_x = x; Cur_y = y; this->anim_number = 0; Roger_Sheet = m_Manager.VLoad_Image("Textures\\Roger\\Roger.bmp"); m_BoundBox.x = x; m_BoundBox.y = y; m_BoundBox.w = 15; m_BoundBox.h = 29; //Standing Anim m_ClippingRect[ROGER_STANDING].x = 19; m_ClippingRect[ROGER_STANDING].y = 22; //Running Anims m_ClippingRect[ROGER_RUN_LEFT_1].x = 52; m_ClippingRect[ROGER_RUN_LEFT_1].y = 1; m_ClippingRect[ROGER_RUN_LEFT_2].x = 104; m_ClippingRect[ROGER_RUN_LEFT_2].y = 1; m_ClippingRect[ROGER_RUN_LEFT_3].x = 156; m_ClippingRect[ROGER_RUN_LEFT_3].y = 1; m_ClippingRect[ROGER_RUN_RIGHT_1].x = 1; m_ClippingRect[ROGER_RUN_RIGHT_1].y = 52; m_ClippingRect[ROGER_RUN_RIGHT_2].x = 52; m_ClippingRect[ROGER_RUN_RIGHT_2].y = 52; m_ClippingRect[ROGER_RUN_RIGHT_3].x = 104; m_ClippingRect[ROGER_RUN_RIGHT_3].y = 52; for(int i = 0; i <= 6; i++) { m_ClippingRect[i].h = 29; m_ClippingRect[i].w = 15; } } void Player::Fall(Tile *tiles[]) { } void Player::Move_Left(Tile *tiles[]) { bool Cant_Move = false; if(cur_vel < max_vel) { cur_vel += 1.f; } if(cur_vel >= max_vel) { cur_vel = 15.f; } for(int i = 0; i < TILE_AMOUNT; i++) { SDL_Rect t_BoundBox = tiles[i]->Get_Boundbox(); int t_Type = tiles[i]->Get_Ttype(); if(SDL_CollideBoundingBox(m_BoundBox,t_BoundBox) == 1) { } else if(SDL_CollideBoundingBox(m_BoundBox,t_BoundBox) == 0 && t_Type != 1) { m_DOverlay.Draw_Box(m_Surface,m_BoundBox.x,m_BoundBox.y); //Debug, checking where collisions occur SDL_Flip(m_Surface); Cant_Move = true; } if(Cant_Move == false) { Cur_x += cur_vel; } } } void Player::Move_Right(Tile *tiles[]) { bool Cant_Move = false; if(cur_vel < max_vel) { cur_vel += 1.f; } if(cur_vel >= max_vel) { cur_vel = 15.f; } for(int i = 0; i < TILE_AMOUNT; i++) { SDL_Rect t_BoundBox = tiles[i]->Get_Boundbox(); int t_Type = tiles[i]->Get_Ttype(); if(SDL_CollideBoundingBox(m_BoundBox,t_BoundBox) == 1) { } else if(SDL_CollideBoundingBox(m_BoundBox,t_BoundBox) == 0 && t_Type != 1) { m_DOverlay.Draw_Box(m_Surface,m_BoundBox.x,m_BoundBox.y); //Debug, checking where collisions occur SDL_Flip(m_Surface); Cant_Move = true; } if(Cant_Move == false) { Cur_x -= cur_vel; } } } void Player::Lose_Velocity() { cur_vel--; if(cur_vel <= 0) cur_vel = 0; } void Player::Draw() { m_Manager.VDraw(Cur_x,Cur_y,Roger_Sheet,m_Surface,m_ClippingRect[anim_number]); } }[/source] The character is positioned at X:450 and Y:200, his is 22px hight and 19px wide. My issue is that he is colliding with nearly every single tile despite him not being remotely close to them.
  • Advertisement