c ++矢量导致我的游戏中断

时间:2010-09-03 07:21:49

标签: c++ visual-c++ winapi vector

我的作品是这样的,我拍摄飞机,如果拍摄的是飞机,它会改变位置(飞机和镜头)而不是删除它们。如果我猛击飞机,飞机位置会发生变化。它被删除比我的健康减少。好吧,当我有大约2-4架飞机离开时,它会打破它,我猛击其中一架并射击其中一架我的游戏中断它弹出一个盒子说矢量超出范围......我有类似这样的问题在我修复它之前,因为我新问题在哪里,但是盒子没有给我任何信息,这是问题所在。我的full code

先谢谢

注意:我不认为我可以使用我的代码来减少任何费用

2 个答案:

答案 0 :(得分:3)

嗯,我只是快速看看那个怪物,我不会看得太远,但是马上就看到了问题。

我不知道这是否与您询问的这个特定问题有关,但是这种类型的东西不会像您想象的那样起作用:

for(long index=0; index < (long)RegularShots.vshots.size(); ++index) 
{ 
   RegularShots.vshots[index].y-=2;
   // Delete Shots
   if(RegularShots.vshots[index].y<-16)
   {
     RegularShots.vshots.erase(RegularShots.vshots.begin()+index);
   }
}

当您从矢量中删除某个项目时,矢量中的下一个项目会向下移动一个,因此每次删除某个项目时,您都会跳过下一个项目并且不对其执行测试。

这里的快速解决方法是在擦除调用之后执行索引。

但基于我所看到的,我会认真地建议您对STL容器和迭代器进行一些阅读。然后阅读一些关于良好编码风格的书籍;)

答案 1 :(得分:2)

学习'refactor':例如,第241行的代码看起来像是一个子程序会更好。

无论如何,要查找此特定问题的位置,请在显示错误框时使用调试器执行“Debug / Break All”;然后查看调试器的“调用堆栈”窗口,查看正在执行的代码会触发弹出框。