• Advertisement
Sign in to follow this  

Problem with my Collision with c++ and SFML

This topic is 1815 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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
Advertisement
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

Why does it need to be constant? Also, thank you, It did work.

Edited by Mathew Bergen

Share this post


Link to post
Share on other sites
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
Sign in to follow this  

  • Advertisement