我试图“删除”/杀死我的实体,如果它们超出“playzone”或至少是用户可见的内容。我没有得到任何错误,但当我在函数“killEdgeEntities”中尝试此代码示例并启动游戏时,Everything将已经死亡,就好像“if语句”直接执行一样。不,我不会在争论之外产生任何东西。例如,用户Ship在屏幕中间生成。
如果你们需要更多信息,请对其进行评论。
void Invaders::killEdgeEntities() {
EntityVector entities;
for (EntityVector::iterator j = mEntities.begin(); j != mEntities.end(); j++) {
Entity *entity = *j;
// * Dödsgränser *
// Vänster:
if (entity->getPosition().getX() < -20) {
delete entity;
}
// Höger:
if (entity->getPosition().getX() > VGCDisplay::getWidth() + 20) {
delete entity;
}
// Upp:
if (entity->getPosition().getY() < -80) {
delete entity;
}
// Ner:
if (entity->getPosition().getY() > VGCDisplay::getHeight() + 20) {
delete entity;
}
}
mEntities = entities;
}
答案 0 :(得分:1)
不是一个真正的答案 - 因为你没有发布足够的代码让我们弄清楚发生了什么......但是你发布了足够的代码来查看问题。
if (entity->getPosition().getX() < -20) {
delete entity;
}
// Höger:
if (entity->getPosition().getX() > VGCDisplay::getWidth() + 20) {
当你的x&lt; -20你删除实体?你试图在下一行中访问它,现在它是一个浮动指针(即它没有指向有效的内存)......并且等待发生崩溃。
答案 1 :(得分:0)
这解决了我的问题,通过最后在实体上对EntityVector&#34;实体&#34;进行push_back的其他批处理。然后最后在for循环之后确保它们是内联的(我猜是平行的)。
void Invaders::killEdgeEntities() {
EntityVector entities;
for (EntityVector::iterator i = mEntities.begin(); i != mEntities.end(); i++) {
Entity *entity = *i;
// * Dödsgränser *
// Vänster:
if (entity->getPosition().getX() < -20) {
delete entity;
}
// Höger:
else if (entity->getPosition().getX() > VGCDisplay::getWidth() + 20) {
delete entity;
}
// Upp:
else if (entity->getPosition().getY() < -80) {
delete entity;
}
// Ner:
else if (entity->getPosition().getY() > VGCDisplay::getHeight() + 20) {
delete entity;
}
else {
entities.push_back(entity);
}
}
mEntities = entities;
}