Jump to content

  • Log In with Google      Sign In   
  • Create Account


SDL_Collision Issue


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 Inferno42   Members   -  Reputation: 101

Like
0Likes
Like

Posted 23 June 2012 - 12:15 PM

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.

Sponsor:

#2 RulerOfNothing   Members   -  Reputation: 1160

Like
0Likes
Like

Posted 23 June 2012 - 07:51 PM

The problem here is that SDL_CollideBoundingBox returns 1 if there is a collision.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS