Java 乒乓球游戏背后的逻辑
我正在创建一个类似于乒乓球的游戏,但并不完全像它。不幸的是,我的逻辑是错误的,但我不知道我应该做什么。目前,球垂直下落。我有一个椭圆和一个矩形。如果椭圆与矩形相交,它应该像物理学中那样在没有空气阻力的情况下“反弹”。目前,它没有这样做,而是从某个位置y重新启动,而不是向上反弹 说清楚一点,即使只是帮助我理解如何使球在窗口中作抛射运动也会有所帮助。我相信我能想出如何使球与“桨”相互作用,但我不能让球像被“桨”击中一样运动 我不想写代码,而是想理解这一点,因为这似乎是任何游戏的基本方面。我将编写代码中似乎相关的部分,如果需要,还会编写更多Java 乒乓球游戏背后的逻辑,java,swing,user-interface,animation,Java,Swing,User Interface,Animation,我正在创建一个类似于乒乓球的游戏,但并不完全像它。不幸的是,我的逻辑是错误的,但我不知道我应该做什么。目前,球垂直下落。我有一个椭圆和一个矩形。如果椭圆与矩形相交,它应该像物理学中那样在没有空气阻力的情况下“反弹”。目前,它没有这样做,而是从某个位置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的位置——这在物理系统中肯定不会发生。我建议您在更新变量之前,先将碰撞检测移到方法的顶部。