Kin*_*nno 5 c++ while-loop do-while
我有一个包含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());
}
}
Run Code Online (Sandbox Code Playgroud)
下面的类是碰撞检测.我稍后会扩展.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.我会给你买一个虚拟啤酒:-)
谢谢
编辑:
ResetPostion - >这将使元素A在屏幕上的随机位置moveObject - >这将查看对象的方向并适当调整x和Y线.
我猜你需要:
do { ...
... } while (checkCollisions(i)); Run Code Online (Sandbox Code Playgroud)
另外,如果你有 10 个元素,那么i = 0; i < 10; i++
顺便说一句。不要写if (something == true),简单地if (something)或者if (!something)
| 归档时间: |
|
| 查看次数: |
5826 次 |
| 最近记录: |