最近,我们被指派编码多个圈子,这些圈子就像GUI界面中的机器人一样。基本上是一个机器人模拟器。
我已经在多个圈子中生成了可以像机器人一样生成的代码。
这是我目前检测机器人与广场末端之间碰撞的代码:
private void checkCollisions(double maxX, double maxY) {
for (ListIterator<Ball> slowIt = balls.listIterator(); slowIt.hasNext();) {
Ball b1 = slowIt.next();
// check wall collisions:
double xVel = b1.getXVelocity();
double yVel = b1.getYVelocity();
if ((b1.getCenterX() - b1.getRadius() <= 0 && xVel < 0)
|| (b1.getCenterX() + b1.getRadius() >= maxX && xVel > 0)) {
b1.setXVelocity(-xVel);
}
if ((b1.getCenterY() - b1.getRadius() <= 0 && yVel < 0)
|| (b1.getCenterY() + b1.getRadius() >= maxY && yVel > 0)) {
b1.setYVelocity(-yVel);
}
for (ListIterator<Ball> fastIt = balls.listIterator(slowIt.nextIndex()); fastIt.hasNext();) {
Ball b2 = fastIt.next();
final double deltaX = b2.getCenterX() - b1.getCenterX() ;
final double deltaY = b2.getCenterY() - b1.getCenterY() ;
if (colliding(b1, b2, deltaX, deltaY)) {
bounce(b1, b2, deltaX, deltaY);
}
}
}
}
b1.setXVelocity(-xVel);
b1.setYVelocity(-yVel);
是使圆圈从墙壁反弹回来的主要部分。然而,取而代之的是,我希望球能够检测到墙壁并旋转90度,而不是像弹跳球那样从墙壁反弹回来。
任何帮助都将得到充分的理解,或者是为我做这件事的代码。我有一个叫做'球'的所有球的AraryList。
如果需要,我可以提供源代码。
这是我到目前为止所拥有的。但我需要每个球都有一个传感器连接到它们,检测前方是否有墙。
答案 0 :(得分:0)
假设你只有方形墙:
例如,如果球击中右侧墙,则需要移除所有x速度,然后添加正或负速度。
这个问题是机器人最终会绕着地图的外边缘走。