包括类尖的传染媒介

时间:2016-12-25 17:31:28

标签: c++ pointers vector sdl-2

让我们说我有一个由Enemy类指针组成的向量:

vector<Enemy*> enemyVect;

然后这个向量充满了敌人指针:

for (int i = 0; i < numbOfEnemys; i++) {  //add all enemies to vector with random EnemeyType
        int random = rand() % enemyTypesVect.size();
        Enemy* e1 = enemyTypesVect[random];
        enemyVect.push_back(e1);    
    }

在此之后,所有的敌人都被分配了一个随机的X-Y坐标:

    for (int i1 = 0; i1 < enemyVect.size(); i1++) { //spread enemys out on X-axis
        int randomx = rand() % 720;
        newRect = enemyVect[i1]->getRect();
        newRect.x = randomx;
        enemyVect[i1]->setRect(newRect);
    }

    for (int i2 = 0; i2 < enemyVect.size(); i2++) { //spread enemys out on Y-axis
        int random = rand() % 1000;
        newRect = enemyVect[i2]->getRect();
        //newRect.y = random;
        newRect.y = random - 1000;
        enemyVect[i2]->setRect(newRect);
    }

在这个阶段,所有的敌人都有自己独特的地位。当程序运行时,我循环遍历此向量,并且我试图让它们在Y轴上移动:

for (int i = 0; i < enemyVect.size(); i++) {

            newRect = enemyVect[i]->getRect();
            newRect.y += enemyVect[i]->getSpeed();
            enemyVect[i]->setRect(newRect);
            enemyVect[i]->draw();
}

这就是问题发生的地方,因为所有敌人都被设置到完全相同的位置。所以它好像只有一个敌人,但实际上有30个,只是叠在一起。我对C ++并不太熟悉,但是我猜它与查看正在设置的同一副本的所有指针有关吗?值得注意的是,此时敌人类型的战斗只包含一种类型的敌人,如果我再添加一个,则会抽出2个敌人。我该怎么做才能解决它?

提前致谢并告诉我是否应该添加更多代码:)

draw()函数:

void Enemy::draw() {
    SDL_RenderCopy(sys.getRen(), getTexture(), NULL, &getRect());
}

1 个答案:

答案 0 :(得分:0)

你的问题在于这一部分:

int random = rand() % enemyTypesVect.size();
Enemy* e1 = enemyTypesVect[random];
enemyVect.push_back(e1);    

你有一系列敌人类型,在你的情况下只有一个对象。保存指向该对象的指针(e1),然后将其添加到向量中。

问题是e1每次都指向同一个副本。设置x / y坐标的函数实际上为每次迭代中的同一对象设置它。

您可以通过打印分配给e1的指针来验证这一点:

printf("e1 is %p\n", e1);

你会发现它对每个敌人都有相同的价值。