c++ - 在函数内更改成员变量的值 - C++

标签 c++ parameter-passing member-variables

我正在为我正在编写的 GBA 游戏做一些碰撞检测和处理,我在将处理部分放入函数时遇到了问题。 我正在尝试更改成员变量的值(在本例中为 Player.global_x),但是将对象传递给函数并不允许这样做。 相关代码如下:

主要.cpp

bool CheckCollision(sprite obj1, sprite obj2){
    int obj1_top = obj1.global_y;
    int obj1_bottom = obj1.global_y + (obj1.height-1);
    int obj1_left = obj1.global_x;
    int obj1_right = obj1.global_x + (obj1.width-1);
    int obj2_top = obj2.global_y;
    int obj2_bottom = obj2.global_y + (obj2.height-1);
    int obj2_left = obj2.global_x;
    int obj2_right = obj2.global_x + (obj2.width-1);

    if(obj1_right < obj2_left){     // if obj1 is left of obj2
        return false;
    }
    if(obj1_left > obj2_right){     // if obj1 is right of obj2
        return false;
    }
    if(obj1_bottom < obj2_top){     // if obj1 is above obj2
        return false;
    }
    if(obj1_top > obj2_bottom){     // if obj1 is below obj2
        return false;
    }

    return true;
}

void HandleCollision(sprite obj1, sprite obj2){
    if(obj1.direction == RIGHT){
        Player.global_x -= (obj1.global_x + obj1.width) - obj2.global_x;    // This works but is not modular
        obj1.global_x -= (obj1.global_x + obj1.width) - obj2.global_x;      // This does not work
    }
}

void CheckAllPossibleCollisions(){
    bool collision = false;
    for(int i=0; i<(WallsVector.size()); i++){
        collision = CheckCollision(Player, WallsVector.at(i));
        if(collision==true){
            // This piece of code works, but would incur repetition of code for each different type of game object
            /*if(Player.direction == RIGHT){
                Player.global_x -= ((Player.global_x+Player.width) - WallsVector.at(i).global_x);
            }*/
            HandleCollision(Player, WallsVector.at(i));
        }
    }
}

CheckCollision() 函数在传递对象时工作正常,但在更改变量时它在 HandleCollision() 中不起作用。

如果您能提出任何有助于解决此问题的意见,我们将不胜感激,谢谢!

最佳答案

您正在按值传递参数。这意味着函数有自己的拷贝。看起来您需要传递引用:

void HandleCollision(sprite& obj1, const sprite& obj2)

注意这里,我把第二个参数标记为const,因为你没有在函数中修改它。在这种情况下是应该传递一个值还是一个引用只是一个优化问题。只有第一个参数需要是(非常量)引用。

关于c++ - 在函数内更改成员变量的值 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23048069/

相关文章:

java - Android:参数不通过 if-else 语句?

Java : object of a class as instance variable in same class

c++ - 如果同一个静态成员变量具有不同的值会发生什么

c++ - 就地重新初始化对象

c++ - 我如何掌握纯 OOD 的概念?

vb.net - 从 VB6 转换为 VB.Net 后字符串默认参数值问题

c++ - 为什么我不能在 C++ 中将函数作为参数跨类传递?

c++ - 初始化成员变量后加括号?

c - 在这些声明下,以下表达式是什么类型,它们是否正确?

c++ - 数组索引到矩阵索引