加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 球离开了屏幕

发布时间:2020-12-15 08:41:12 所属栏目:Java 来源:网络整理
导读:我一直试图制作一个弹跳球动画.除了一件事,我已经把一切都搞定了. 一旦它击中框架的下甲板和框架的右侧,球就会离开屏幕. 我设置的条件如下: if( x_Pos frameWidth - ballRadius) // turn the ball backif( y_Pos frameHeight - ballRadius) // turn the bal
我一直试图制作一个弹跳球动画.除了一件事,我已经把一切都搞定了.
一旦它击中框架的下甲板和框架的右侧,球就会离开屏幕.

我设置的条件如下:

if( x_Pos > frameWidth - ballRadius)
  // turn the ball back
if( y_Pos > frameHeight - ballRadius)
  // turn the ball back

但是当它击中框架的下甲板和右甲板时,球会消失一段时间.
以下是最终发生的事情:

在第二张照片中,球击中了下层,并且已经消失了一段时间.为什么会这样?

如果这是我的完整代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MovingBall2D extends JPanel{

 int x_Pos=0;
 int y_Pos=30;
 int speedX=1;
 int speedY=1;
 int diameter=30;
 int height=30;
 int frameX=700;
 int frameY=200;
 int radius=diameter/2;

 MovingBall2D() {
  this.setSize(frameX,frameY);
  ActionListener taskPerformer = new ActionListener() {
   public void actionPerformed(ActionEvent ae) {
     if(x_Pos < 0) {
      x_Pos = 0;
      speedX = 1;
     }
     else if( x_Pos >= ( frameX - radius ) ) {
      x_Pos =  frameX - diameter;
      speedX = -1; 
     }
     if(y_Pos < 0) {
      y_Pos = 0;
      speedY = 1;
     }
     else if( y_Pos >= ( frameY - radius ) ) {
      y_Pos =  frameY - radius; 
      speedY = -1;
     } 
     x_Pos = x_Pos + speedX;
     y_Pos = y_Pos + speedY;    
     repaint();
    }
   };
    new Timer(4,taskPerformer).start();
  }

   public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.black);
    g.fillRect(0,frameX,frameY);
    g.setColor(Color.red);
    g.fillOval(x_Pos,y_Pos,diameter,height);
   }
  }

   class Main2D {
    Main2D() {
     JFrame fr=new JFrame();
     MovingBall2D o = new MovingBall2D();
     fr.add(o);
     fr.setSize(600,200);
     fr.setVisible(true);
     fr.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    } 

     public static void main(String args[]) {
        new Main2D();
     }
     }

解决方法

MovingBall2D.this.getHeight()是173(因为面板填充,标题,边框等).这就是为什么

只需替换if conidion就像这样:

else if( y_Pos >= ( MovingBall2D.this.getHeight()- radius ) )
    {
        y_Pos = MovingBall2D.this.getHeight() - radius;
        speedY = -1;
    }

这样做的好处是即使用户调整窗口大小,球也会碰到新的窗口边界.对X轴执行相同操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读