我在互联网上找到了一些解释如何使球弹跳的答案,但其中一些没有帮助我(因为弹跳不是随机的),有些非常困难(我的物理知识有限)。 / p>
问题:我有一个移动和弹跳的球,但不是随机的,我想让这个球随机弹跳。
我已经有了这段代码:
Public Class Ball{
/** Coordinates */
private int x, y;
/** Speed of the ball*/
private int speedX, speedY;
public Ball(int x, int y, int speedX, int speedY) {
this.x = x ;
this.y = y ;
this.speedX = speedX;
this.speedY = speedY;
}
public void moveAndBounce() {
x += speedX ;
y += speedY ;
// Assuming that touchWallHorizontal() and touchWallHorizontal() work
if (touchHorizontalWall()) {
speedX = -speedX ;
}
if (touchVerticalWall()) {
speedY = -speedY ;
}
}
public static void main (String [] args){
Ball ball = new Ball(); // Initialisation
while (true){
ball.moveAndBounce() ;
}
}
}
它完美无缺,但球的运动总是相同的(矩形)。
问题:有没有办法随机弹跳而不添加球的属性(只是坐标和速度)?
如果没有,解决这个问题的解决方案难度不大吗?
提前致谢!
答案 0 :(得分:1)
问题解决了。这是moveAndBounce()方法的新代码(感谢johnHopkins):
public void moveAndBounce() {
x += speedX ;
y += speedY ;
Random random = new Random();
if (touchHorizontalWall()) {
if (speedX > 0) {
// New speed between 10 and 15 (you can choose other)
setSpeedX(-random.nextInt(15) + 10);
} else {
setSpeedX(random.nextInt(15) + 10
}
}
if (touchVerticalWall()) {
if (speedY > 0) {
setSpeedY(-random.nextInt(15) + 10);
} else {
setSpeedY(random.nextInt(15) + 10);
}
}
}