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轴执行相同操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |