Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从另一个类动态获取整数?_C++ - Fatal编程技术网

C++ 如何从另一个类动态获取整数?

C++ 如何从另一个类动态获取整数?,c++,C++,我正在和Qt一起做吃豆人游戏。我得到了两个类,Ghost和Pacman,它们都继承自抽象类MovableItem(这是强制性的,因为我们需要应用多态性) 在幽灵移动算法中,我需要pacman的位置,即pacman中的数据成员pacX和pacY,试图让幽灵通过比较它们的位置来追踪pacman 我尝试在Ghost中创建一个pacman对象,还尝试使用get函数获取pacX和pacY。但是我在《幽灵》中得到的吃豆人的位置始终是它的起始位置。当游戏运行时,是否有任何方法可以获取Ghost中两个数据成员的

我正在和Qt一起做吃豆人游戏。我得到了两个类,GhostPacman,它们都继承自抽象类MovableItem(这是强制性的,因为我们需要应用多态性)

在幽灵移动算法中,我需要pacman的位置,即pacman中的数据成员
pacX
pacY
,试图让幽灵通过比较它们的位置来追踪pacman

我尝试在Ghost中创建一个pacman对象,还尝试使用get函数获取
pacX
pacY
。但是我在《幽灵》中得到的吃豆人的位置始终是它的起始位置。当游戏运行时,是否有任何方法可以获取Ghost中两个数据成员的新值


对不起,没有具体说明。游戏开始时,调用函数
starttt
,并创建所有鬼魂和吃豆人:

void MainWindow::starttt()
{
    timer = new QTimer(this);
    ghostTimer = new QTimer(this);
    map = new PacmanMap;
    pacman = new Pacman;
    ghost1 = new Ghost;
    ghost2 = new Ghost;
    ghost3 = new Ghost;
    ghost4 = new Ghost;
    scene->addItem(map);
    scene->addItem(pacman);
    scene->addItem(ghost1);
    scene->addItem(ghost2);
    scene->addItem(ghost3);
    scene->addItem(ghost4);
pacman的方向由WASD键设置,并传递给pacman

void MainWindow::keyPressEvent(QKeyEvent *event)
{
        switch (event->key())
        {
        case Qt::Key_W:
            if(!pacman->getMoving())
                pacman->setDirection(1);
            else
                pacman->setNextDirection(1);
            break;
Pacman中,Pacman的起始位置在构造函数中声明,并以以下方式更改:

void Pacman::move(int)
{
    QPoint p;
    switch(direction)
    {
    case 1:
        p.setX(pacX);
        p.setY(pacY-5);
        setDirection(direction);

        if(mapmap->canMove(p))
        {
            pacY-=5;
            moving = true;
        }
        else {
            moving = false;
        }
        break;
        ...
        ...

    setPacX(pacX);
    setPacY(pacY);
}
} 
在“幽灵”中,我在构造函数中创建了一个新的Pacman,我希望幽灵通过获取其当前位置来追踪Pacman:

void Ghost::ghostMove2()
{
    if(!moving)
    {
        if(direction==1||direction==2)
        {
            if(ghostX > pacman->pacX)
                direction = 3;
            else if(ghostX < pacman->pacX)
                direction = 4;
            else if(ghostX == pacman->pacX)
            {
                if(ghostY > pacman->pacY)
                    direction = 1;
                else if(ghostY < pacman->pacY)
                    direction = 2;
            }
        }
        else if(direction==3 || direction==4)
        {
        ...
        ...
void Ghost::ghostMove2()
{
如果(!移动)
{
如果(方向==1 | |方向==2)
{
如果(幽灵>吃豆人->吃豆人)
方向=3;
否则如果(鬼魂pacX)
方向=4;
else if(ghostX==pacman->pacX)
{
如果(幽灵>吃豆人->吃豆人)
方向=1;
else if(幽灵pacY)
方向=2;
}
}
否则如果(方向==3 | |方向==4)
{
...
...

如果您每次尝试获得位置时都要创建一个新的Pacman,它将始终位于起始位置。此外,如果您的
Ghost
类存储的Pacman与您移动并显示在屏幕上的Pacman不同,它也将始终位于起始位置

创建
Ghost
时,确保它指向正确的Pacman对象:

int main() {
    Pacman pacman = ...; 
    Ghost ghost = ...;
    ghost.setPacman(&pacman); 
}
你需要给出一个,这将让人们复制你的错误,并知道他们是否找到了实际的修复方法。无关:
pacX
pacY
在Pacman中,而不仅仅是
MovableItem
中普通的
X
Y
中的
Y
,似乎是存储
MovableItem
位置的更合理的地方。