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

时间:2019-06-06 21:03:54

标签: c++

我正在与Qt合作进行吃豆游戏。我有两个类 Ghost Pacman ,它们都是从抽象类 MovableItem 继承的(这是强制性的,因为我们需要应用多态性)

在幽灵移动算法中,我需要pacman的位置,它们是 Pacman 中的数据成员pacXpacY,试图使幽灵追赶pacman通过比较他们的位置。

我尝试在 Ghost 中创建一个pacman对象,还尝试使用get函数获取pacXpacY。但是我在 Ghost 中获得的pacman的位置始终是其起始位置。游戏运行时,有什么方法可以让我在 Ghost 中获得两个数据成员的新价值?


抱歉,没有具体说明。游戏开始时,将调用函数starttt,并创建了所有幽灵和pacman:

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);
}
} 

Ghost 中,我在构造函数中创建了一个新的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)
        {
        ...
        ...

1 个答案:

答案 0 :(得分:2)

如果每次尝试获取新的Pacman职位时,它将始终位于起始位置。另外,如果您的Ghost类存储的Pacman与您正在移动并在屏幕上显示的Pacman不同,则该Pacman(也)将始终位于起始位置。

创建Ghost时,请确保其指向 right Pacman对象:

int main() {
    Pacman pacman = ...; 
    Ghost ghost = ...;
    ghost.setPacman(&pacman); 
}