gpt4 book ai didi

java - 弹跳球不会在边界停留 JAVA

转载 作者:行者123 更新时间:2023-12-01 17:16:23 26 4
gpt4 key购买 nike

我的弹跳球旨在在 200x200 窗口边框之间弹跳。当他触及右侧和底部边界时,我设法让他停下来并改变方向。但当他到达顶部和左侧边界时,球的 1/4 会穿过边界,然后才改变方向。

我不知道为什么会发生这种情况,我的意思是每个边框实际上都是相同的代码行。对于相同的代码,它的工作方式怎么会不同呢?

我在网上浏览了很多关于这个主题的代码,并尝试了每个解决方案或代码,但它仍然保持不变。

谢谢。

 public Point applyToPoint(Point p) {
return new Point(p.getX() + dx, p.getY() + dy);
}

public void moveOneStep(int width, int height) {
if (this.center.getX() + this.getVelocity().dx + r > width) {
this.setVelocity(-(this.getVelocity().dx), this.getVelocity().dy);
}
if (this.center.getX() + this.getVelocity().dx < 0) {
this.setVelocity(-(this.getVelocity().dx), this.getVelocity().dy);
}
if (this.center.getY() + this.getVelocity().dy + r > height) {
this.setVelocity(this.getVelocity().dx, -(this.getVelocity().dy));
}
if (this.center.getY() + this.getVelocity().dy < 0) {
this.setVelocity(this.getVelocity().dx, -(this.getVelocity().dy));
}
moveOneStep();
}

public void moveOneStep() {
this.center = this.getVelocity().applyToPoint(this.center);
}

r = 球的半径。

“this.center”=球的中心点。

左边框球的截图:

img

 import biuoop.DrawSurface;
import biuoop.GUI;
import biuoop.Sleeper;

public class BouncingBallAnimation {

static private void drawAnimation(Point start, double dx, double dy) {
GUI gui = new GUI("BouncingBall",200,200);
Sleeper sleeper = new Sleeper();
Ball ball = new Ball(new Point(start.getX(), start.getY()), 30, java.awt.Color.BLACK);
ball.setVelocity(dx, dy);
while (true) {
DrawSurface d = gui.getDrawSurface();
ball.moveOneStep(d.getHeight(),d.getWidth());
ball.drawOn(d);
gui.show(d);
sleeper.sleepFor(50); // wait for 50 milliseconds.
}
}
public static void main(String[] args) {
drawAnimation(new Point(20,33),6,6); //just a random input that I decided
}
}

最佳答案

I mean it's literally the same code lines for each border

这就是问题所在。情况不同怎么会一样呢?

当球向右/向下移动时,x/y 值会增加。

当球向左/向上移动时,x/y 值会减小。

if (this.center.getX() + this.getVelocity().dx < 0) {

我猜应该是:

if (this.center.getX() - this.getVelocity().dx - r < 0) {

这假设“中心”实际上是圆的中心。

编辑:

另外:

    this.setVelocity(-(this.getVelocity().dx), this.getVelocity().dy);
}
if (this.center.getX() + this.getVelocity().dx < 0) {
this.setVelocity(-(this.getVelocity().dx), this.getVelocity().dy);

在这两种情况下,x 速度变化如何为负值。

向右移动时,您会从正速度变为负速度

那么当向左行驶时,您不应该从负速度变为正速度吗?

关于java - 弹跳球不会在边界停留 JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61378592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com