我很困难。过去两天我一直在尝试Google搜索,但我无法弄清楚。我有一个叫做Player的类,另一个叫做从Ellemy继承的Player。我有一个列表,它存储我的子弹的坐标并循环播放它们在播放器中。我试图访问和循环通过相同的列表来检查在Enemy中建立在播放器上的碰撞,但它甚至不会进入循环。我猜不知它是空的,但为什么?C++列表循环
struct structShoot
{
float x;
float y;
};
class Player
{
private:
blablabla
protected:
list<structShoot>::iterator it;
list<structShoot> shoot_list;
structShoot test;
public:
void render(SDL_Surface* dest);
};
void Player::render(SDL_Surface* dest)
{
//Works fine, see the other loop down below
for(it = shoot_list.begin(); it != shoot_list.end();)
{
shoot.moveSet(it->x, it->y);
shoot.draw(dest);
it->y--;
if((it->y) < -25)
{
it = shoot_list.erase(it);
}
else
{
it++;
}
}
}
class Enemy : protected Player
{
public:
void render(SDL_Surface* dest);
};
void Enemy::render(SDL_Surface* dest)
{
SDL_Rect a, b;
//Does not enter loop!? Ever. Why?
for(it = shoot_list.begin(); it != shoot_list.end();)
{
SDL_Quit();
a.x = enemy.getX();
a.y = enemy.getY();
a.w = enemy.getWidth();
a.h = enemy.getHeight();
b.x = it->x;
b.y = it->y;
b.w = 10;
b.h = 19;
it->y--;
if (collision(a, b) == true)
{
SDL_Quit();
}
if(it->y < -25)
{
it = shoot_list.erase(it);
}
else
{
it++;
}
}
}
也许你在第一个循环中删除了整个列表,所以第二个循环无关? – 2011-04-11 14:21:58
您是否曾尝试在调试器中运行此操作或添加打印语句?例如,你有没有检查过'!shoot_list.empty()'? – 2011-04-11 14:22:24
你并没有将'Enemy'对象的某种类型多态转换为'Player'指针,是吗?如果是这样的话,那么因为render()不是一个虚函数,任何对某个指针(* my_player).render()的调用只会调用'Player :: render()'而不是'Enemy ::渲染()'。 – Jason 2011-04-11 14:35:26