Sign in to follow this  
Crusable77

Problem with my Collision with c++ and SFML

Recommended Posts

Crusable77    594

Hello, I have been making a pong clone and I have run into some trouble with collision. It is not that I cannot get collision to work, it is(I think) my approach that is flawed. I have searched on google for help, however I could not find anything.

 

collision.h

 

 

 
 
#ifndef COLLISION_H
#define COLLISION_H
 
#include <SFML\Graphics.hpp>
 
#include "Ball.h"
#include "Player.h"
#include "Enemy.h"
 
class Collision{
 
public:
    Collision();
    ~Collision();
 
    //return true if there is a collision detected
    bool BOP_Collision(sf::RenderWindow& App, const Player* const player = NULL, const Enemy* const enemy = NULL); //BOP = boundries on paddle
    bool BOB_Collision(sf::RenderWindow& App, const Ball* const ball); //BOB = boundries on ball
    bool POB_Collision(sf::RenderWindow& App, const Player* const player = NULL, const Enemy* const enemy = NULL, const Ball* const ball = NULL); //POB = paddle on ball
 
private:
    sf::Vector2f pVector; //vector for the player
    sf::Vector2f eVector; //vector for the enemy
    sf::Vector2f bVector; //vector for the ball
 
};
 
#endif

collision.cpp

 

 
#include "Collision.h"
 
Collision::Collision(){}
 
Collision::~Collision(){}
 
bool Collision::BOP_Collision(sf::RenderWindow& App, const Player* const player = NULL, const Enemy* const enemy = NULL){
 
    pVector = player->getPosition();
    eVector = enemy->getPosition();
}
 
bool Collision::BOB_Collision(sf::RenderWindow& App, const Ball* const ball){
 
 
}
 
bool Collision::POB_Collision(sf::RenderWindow& App, const Player* const player = NULL, const Enemy* const enemy = NULL, const Ball* const ball = NULL){
 
 
}

 

The error is with

pVector = player->getPosition()
. It says "Error: the object has type qualifiers that are not compatible with the member function". Thank you in advance for all your help.

Share this post


Link to post
Share on other sites
ultramailman    1720
I am guessing your getPosition method is lacking a const on the right hand side of the method signature.
If I guessed right, it should be something like this:
class Player
{
public:
    Vector getPosition() const; //<- this const
};
Edited by ultramailman

Share this post


Link to post
Share on other sites
ultramailman    1720
Look at this signature:
bool Collision::BOP_Collision(sf::RenderWindow& App, const Player* const player = NULL, const Enemy* const enemy = NULL);
The player variable is of type
const Player * const
That means the pointer and the object it points should not be changed while in this function. So if you call a read-write (not const)method on player, the compiler will tell you it's an error. That's why the method should be declared as read-only (has that const on the right side).

It's a good idea to make a method const, if the method does not modify the object. Edited by ultramailman

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this