我有一个包含 10 个项目的向量(为简单起见,所有同一个类都称为“a”)。我想要做的是检查'A'不是a)隐藏墙壁或b)隐藏另一个'A'。我有一个碰撞功能可以做到这一点。
这个想法只是让这个循环类通过并将“A”移动到下一个位置,如果该药水引起了碰撞,那么它需要在屏幕上给自己一个新的随机位置。因为屏幕很小,所以很有可能将元素放在另一个屏幕上(或墙顶等)。代码的逻辑在我的脑海中运行良好 - 但调试代码时对象只是卡在循环中,并保持在相同的位置。'A' 应该在屏幕上移动,但它保持不动!
当我注释掉 Do while 循环并将“MoveObject()”函数向上移动时,代码完美地工作,“A”在屏幕上移动。只是当我尝试为其添加额外功能时,它才不起作用。
void Board::Loop(void){
//Display the postion of that Element.
for (unsigned int i = 0; i <= 10; ++i){
do {
if (checkCollisions(i)==true){
moveObject(i);
}
else{
objects[i]->ResetPostion();
}
}
while (checkCollisions(i) == false);
objects[i]->SetPosition(objects[i]->getXDir(),objects[i]->getYDir());
}
}
下面的类是碰撞检测。这个我稍后会展开。
bool Board::checkCollisions(int index){
char boundry = map[objects[index]->getXDir()][objects[index]->getYDir()];
//There has been no collisions - therefore don't change anything
if(boundry == SYMBOL_EMPTY){
return false;
}
else{
return true;
}
}
任何帮助将非常感激。我会给你买一杯虚拟啤酒:-)
谢谢
编辑:
ResetPostion -> 这将给元素 A 在屏幕上的随机位置 moveObject -> 这将查看对象的方向并适当地调整 x 和 Y 线。