让我们说我有由阶级敌人的指针的向量:矢量由指针的类
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);
}
在此之后的所有敌人被随机分配的XY坐标:
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);
}
在这个阶段所有的敌人,有其独特的p osition。当程序运行时,我通过循环这一载体,我努力使他们在移动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++并不太熟悉,但我猜它必须处理所有指向正在设置的相同副本的指针?值得注意的是,敌人类型只有1种类型的敌人,如果我再增加一个敌人,那么2个敌人正在绘制。我该如何解决它?
在此先感谢,让我知道我是否应该包括更多的代码:)
功能为平局():
void Enemy::draw() {
SDL_RenderCopy(sys.getRen(), getTexture(), NULL, &getRect());
}
解决此类问题的正确工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您应该\编辑您的问题,以包含一个[最小,完整和可验证](http://stackoverflow.com/help/mcve)示例,该示例再现了您的问题,以及您在调试器。 –
想想你为每种敌人类型创造了多少物品。 – Mat
可能与您的问题无关,但您应该使用'std :: vector> enemyVect;'或'std :: vector >'而不是原始指针。 –