java - 弹跳球 Java。不明白为什么球不弹跳

标签 java

因此我们必须使用给定的代码使球反弹。由于测试器中的计时器方法,下面的翻译方法基本上每 1 秒运行一次。此外,测试仪将 dx 传递为 0,将 dy 传递为 1。最初球向下移动,我试图让它在到达 y = 100 时弹回。我不明白为什么这段代码不起作用,因为从逻辑上讲它使对我来说……

public void translate(int dx, int dy) {
    x += dx;
    y += dy;
    if(y >= 100){
        dy = -1 * dy;
    }
  }

我用这段代码运行它,球一直向下移动。 y = 球的 y 方向和 x = 球的 x 方向

更新:感谢您的回答。因此,从我得到的结果来看,我需要在调用翻译方法的方法中添加 if 语句。调用翻译方法的代码是:

 private void moveMyShape() {

    Timer t = new Timer(DELAY, getActionListener());
    t.start();

  } //method


  private ActionListener getActionListener() {

    return new 
          ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
              myMoveableShape.translate(0, 1);
              myShape.repaint();

            }
          };

  } 

那么我该如何在这个方法中添加 if 语句呢?比如我如何跟踪球的 y 位置,以便我可以在 translate 方法上方添加 if 语句。顺便说一句,这个 actionListener 代码在不同的类中。它在测试类中。

第二次更新:是的,我在 myMoveableShape 中有一个 public static int getY()。在测试器中,我添加了这段代码:

public void actionPerformed(ActionEvent ae) {
                    if(MyMoveableShape.getY() > 100 || MyMoveableShape.getY() < 0){
                        myMoveableShape.translate(0,-1);
                    }
                    myMoveableShape.translate(0,1);


                myShape.repaint();

但是球刚刚到达 y = 100 的位置就停止了移动。

最佳答案

当您将 int 传递给翻译方法时,它是“按值”,而不是“按引用”,因此您对值所做的任何更改都不会超出方法的范围。

您需要在您的代码的更高层执行 ​​y 的检查和它的反转,可能在您从中调用 translate 的相同方法中。

更新:

在你的类中添加一个“速度”属性,比如

private int velocityY = 1;
public int getVelocityY() {
    return velocityY;
}
public void setVelocityY(int vel) {
    velocityY = vel;
}

然后您可以将该 block 修改为类似于

public void actionPerformed(ActionEvent ae) {
    if(MyMoveableShape.getY() > 100 || MyMoveableShape.getY() < 0){
         myMoveableShape.setVelocityY(-myMoveableShape.getVelocityY());
     }
     myMoveableShape.translate(0,myMoveableShape.getVelocityY());
     myShape.repaint();
}

更新 2:根据您的评论,您可以试一试:

private boolean goingUp = false;
public void translate(int dx, int dy) {
    x += dx;
    if(goingUp){
        y += dy;
    } else {
        y -= dy;
    }
    if(y >= 100 || y < 0){
        goingUp = !goingUp; //Toggle it back and forth
    }
  }

关于java - 弹跳球 Java。不明白为什么球不弹跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26518553/

相关文章:

java - 让类(class)知道它的类型是不是太好了?

java - 没有响应类型的Spring Boot RestTemplate发布

java - 如何顺序地为同一类型的事实编写规则?

java - 如何在java中使用xpath获取xml的一部分

java - double 或 BigDecimal 会溢出吗?

java - KafkaConsumer.commitAsync() 行为具有比以前更低的偏移量

java - Android抛出空指针异常

java - DefaultTableModel 正在保存到文件,但如何加载该文件以再次使用它?

java - 如何在 Gradle 构建脚本中更改 java 源目录

java - 我使用 Camel 代理如何在接口(interface)中发送 header 作为参数