让我们说我有一个由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());
}
答案 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);
你会发现它对每个敌人都有相同的价值。