c++列表循环
C++ list looping
我被困在这里了。我一直在尝试和谷歌搜索过去的2天,但我不能弄清楚。我有一个类叫做Player另一个类叫做Enemy它继承自Player。我有一个存储子弹坐标的列表,并在Player中循环它们。我试图访问和循环通过相同的列表来检查碰撞的敌人,建立在玩家,但它甚至不会进入循环。我猜它是空的,但为什么?
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++;
}
}
}
你应该使渲染虚拟使用多态性。
virtual void render(SDL_Surface* dest);
我想每次你调用Player::render,因为这样的代码:
Player* enemy = new Enemy();
enemy->render(); // there is Player::render calling
如果你使渲染虚拟,你将使用虚拟表来检测正确的函数,应该在这个地方调用。所以你必须让渲染是虚拟的
只有一种可能导致这种情况,即shoot_list.begin()
等于shoot_list.end()
,因此它是空的。
也许在Player::render
处的循环被打破并完全清空了列表?
相关文章:
- 通过for循环使用用户输入填充列表
- 下面是我为检测链接列表中的循环而制作的代码
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 在C++中循环访问自定义结构列表的小问题
- 如何找到循环列表的开头?
- c++ 循环访问对象列表并删除对象
- 查找链表是否为循环列表
- 标准库中的双链接循环列表
- 使用STD ::列表作为循环列表安全吗?
- 双向循环列表中的赋值运算符以错误的顺序添加元素
- 单链循环列表的复制构造函数
- C++-从单链循环列表中的任何索引中删除一个节点
- 当传递给函数时,奇异链表变为循环列表
- std::list是一个循环列表!!等等,什么
- 读取文件".txt"并将每行的数据分配给循环列表中的新节点C++
- 在循环列表时,删除列表中的对象的正确方法是什么
- c++循环列表错误
- 删除循环列表中的节点时崩溃
- STL算法可以与循环列表一起使用吗?
- 双链循环列表 c++