Java 乒乓球游戏背后的逻辑

Java 乒乓球游戏背后的逻辑,java,swing,user-interface,animation,Java,Swing,User Interface,Animation,我正在创建一个类似于乒乓球的游戏,但并不完全像它。不幸的是,我的逻辑是错误的,但我不知道我应该做什么。目前,球垂直下落。我有一个椭圆和一个矩形。如果椭圆与矩形相交,它应该像物理学中那样在没有空气阻力的情况下“反弹”。目前,它没有这样做,而是从某个位置y重新启动,而不是向上反弹 说清楚一点,即使只是帮助我理解如何使球在窗口中作抛射运动也会有所帮助。我相信我能想出如何使球与“桨”相互作用,但我不能让球像被“桨”击中一样运动 我不想写代码,而是想理解这一点,因为这似乎是任何游戏的基本方面。我将编写代码

我正在创建一个类似于乒乓球的游戏,但并不完全像它。不幸的是,我的逻辑是错误的,但我不知道我应该做什么。目前,球垂直下落。我有一个椭圆和一个矩形。如果椭圆与矩形相交,它应该像物理学中那样在没有空气阻力的情况下“反弹”。目前,它没有这样做,而是从某个位置y重新启动,而不是向上反弹

说清楚一点,即使只是帮助我理解如何使球在窗口中作抛射运动也会有所帮助。我相信我能想出如何使球与“桨”相互作用,但我不能让球像被“桨”击中一样运动

我不想写代码,而是想理解这一点,因为这似乎是任何游戏的基本方面。我将编写代码中似乎相关的部分,如果需要,还会编写更多

ellipse = new Ellipse2D.Double((int)Ox, (int)Oy, 50, 50);
    protected class timeBall implements ActionListener{


            @Override
            public void actionPerformed(ActionEvent e) {
                    scale = 20.0;
                    speedY += 9.8*10.0/scale;
                    speedX = 50;
                    Oy = Oy + speedY * 10;
                    Ox = Ox + speedX *10;
                    Oy = Oy / scale;
                    Ox = Ox / scale;
                 //   System.out.println(speedX + " " + speedY);
                  //  System.out.println(Ox + " " + Oy);


                    try{
                        System.out.println(paddleRect.getX());
                       if(ellipse.intersects(paddleRect)){
                             Random random = new Random();

                             speedY *= -0.2;
                             Oy = Oy * -(random.nextInt(4));  

                        }

                }catch(RuntimeException NullPointerException){

                }
                    repaint();
            }

请注意,这不是完整的代码,但为了简单起见,我刚刚列出了似乎应该包含的内容。

调用变量
NullPointerException
是一个非常令人困惑的想法。如果
Oy
是椭圆的y位置,为什么要将其位置乘以负随机数?为什么不让
Oy
在下一个循环中更新呢?@AndyTurner我尝试了很多不同的组合。这恰好是最近的一次尝试。我记不起我试过的所有东西,但有一点是肯定的,那就是我只是让Oy一个人呆着,把速度改成了负数。@AndyTurner我要在完成之前更改变量的名称。这只是一个例外,我想确保被抓住。我不知道为什么我把它从e改过来,所以我可能会把它改回来。我可以肯定地告诉你,你不想在反弹时乘以y的位置——这在物理系统中肯定不会发生。我建议您在更新变量之前,先将碰撞检测移到方法的顶部。