У меня есть класс Object, который имеет следующие атрибуты: xPos и yPos. Он также имеет геттеры и сеттеры для этих атрибутов. У меня есть еще один класс CollisionDetector, который имеет функцию, называемую обнаружением, которая принимает два объекта и обнаруживает, столкнулись ли они. Если они есть, то он отталкивает их друг от друга с помощью функций setXPos() и setYPos(). Однако это не меняет ценности, и я пытаюсь понять, почему?Как изменить свойства объекта в функции другого класса на C++?
Object::Object(){
}
Object::Object(float x, float y) { //constructor
xPos = x;
yPos = y;
}
float Object::getXPos(){
return xPos;
}
float Object::getYPos(){
return yPos;
}
void Object::setXPos(float temp){
xPos = temp;
}
void Object::setYPos(float temp){
yPos = temp;
}
char Object::getType(){
return type;
}
bool CollisionDetector::detect(Object a, Object b){
double size = 45; //Set size
double xPosition = a.getXPos() - b.getXPos();
double yPosition = a.getYPos() - b.getYPos();
double sumRadius = (size/2 + 1) + (size/2 + 1);
double radiusSquared = sumRadius * sumRadius;
double distanceSquared = (xPosition * xPosition) + (yPosition * yPosition); //square the distances
if (distanceSquared <= radiusSquared)
{
//Check for collisions between tanks
if(a.getType() == 't' && b.getType() == 't'){
if(a.getXPos() > b.getXPos()){
a.setXPos(a.getXPos() + 10);
}
else if(a.getXPos() < b.getXPos()){
a.setXPos(a.getXPos() - 10);
}
//Same for y direction
if(a.getYPos() > b.getYPos()){
a.setYPos(a.getYPos() + 10);
}
else if(a.getYPos() < b.getYPos()){
a.setYPos(a.getYPos() - 10);
}
}
return true;
}
return false;
}
Функция вызывается из главного пользования: collisionDetector.detect (userTank, enemyTank);
(минимальный) Код, пожалуйста, люди не могут без этого помочь. –
Опубликуйте [MCVE] (http://stackoverflow.com/help/mcve). Если это невозможно, отправьте соответствующий код. –
Мы понимаем, что вы пытаетесь найти решение, но без кода мы не можем решить проблему. – Sridhar