Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对反弹的球施加重力_Java_Gravity - Fatal编程技术网

Java 对反弹的球施加重力

Java 对反弹的球施加重力,java,gravity,Java,Gravity,我在做弹跳球项目。我成功地制造了一个上下移动的球。我已经设置好了,这样球就不能出界了,所以当它碰到屏幕边缘时,它只是反弹回来,以此类推 现在,问题是,我希望球最终停止移动。例如,当我启动程序时,球下落并反弹到其起始高度的80%。当它再次下降时,会因重力而加速,然后再上升,但可能只达到原来高度的60%,最终会停止移动 我如何创造这样的东西?我在谷歌上搜索了几个小时,但没有找到任何帮助。所以现在我恳求你帮我一把。此外,如果你决定给我一个方便的提示,请尽量具体和非常清楚。我已经很久没有编程了。提前谢谢

我在做弹跳球项目。我成功地制造了一个上下移动的球。我已经设置好了,这样球就不能出界了,所以当它碰到屏幕边缘时,它只是反弹回来,以此类推

现在,问题是,我希望球最终停止移动。例如,当我启动程序时,球下落并反弹到其起始高度的80%。当它再次下降时,会因重力而加速,然后再上升,但可能只达到原来高度的60%,最终会停止移动

我如何创造这样的东西?我在谷歌上搜索了几个小时,但没有找到任何帮助。所以现在我恳求你帮我一把。此外,如果你决定给我一个方便的提示,请尽量具体和非常清楚。我已经很久没有编程了。提前谢谢

这是我的密码:

EDIT:注意我没有这个类的main方法,因为我不需要它。我通过一个对象在另一个类中运行它

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.Timer;

public class Game extends JPanel implements ActionListener{

    int DIAMETER = 40;
    int yPos;
    int yVel = 3;
    int GRAVITY =1;

    Timer tm = new Timer(5,this);

    public void paintComponent(Graphics g){
        super.paintComponent(g);

        //Setting the characteristics for the ball
        g.setColor(Color.red);
        g.fillOval(0, yPos, DIAMETER, DIAMETER);
        tm.start();
        repaint();
    }

    public void actionPerformed(ActionEvent e) {

        //If it decides to go out of the screen, change direction.
        if(yPos<0 || yPos>430)yVel=-yVel;

        //This basically is the "engine". It moves the ball.
        yPos = yPos + yVel;

    }
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类游戏扩展JPanel实现ActionListener{
内径=40;
int yPos;
int-yVel=3;
重力积分=1;
定时器tm=新定时器(5,此);
公共组件(图形g){
超级组件(g);
//设置球的特征
g、 setColor(Color.red);
g、 圆角(0,yPos,直径,直径);
tm.start();
重新油漆();
}
已执行的公共无效操作(操作事件e){
//如果它决定离开屏幕,改变方向。
if(yPos430)yVel=-yVel;
//这基本上就是“引擎”,它移动球。
yPos=yPos+yVel;
}
}
从系统中取出一些能量

当它撞击地面时,动能是
E=0.5*m*v*v
,其中
m
是质量,
v
是速度

E
减少一定量,比如说
new\u E=0.8*E
。然后使用重新排列的动能公式计算新的初始上升速度


这是惊人的现实。当然,你并不真的需要0.5的系数,但我保留了它,让物理学家们高兴。你也不需要
m

你所指的概念叫做弹性碰撞,查一下你就会知道如何将物理方程应用到你的模拟中不,它绝对是非弹性的。这是一样的,弹性系数只是0@MangO_O当前位置我不认为它意味着你认为它的功能,如果你想说的是0,那可能是完全非弹性碰撞。这不是一个完全非弹性的碰撞。而且由于
E=mgh
这实际上应该在每次弹跳时精确地降低80%的高度。是的,这非常有用!我一定会的!但我只是想知道,如何让Java在碰撞后减少E?我想我可以这样写:如果球撞到墙上,减少能量。但我如何在代码中表达呢?这可以简化为“速度乘以常数”。更紧迫的困难似乎是将思想转化为代码。@user2357112不太可能,因为速度项是平方的。@ZongZhengLi:这意味着常数是能量乘以的平方根。