gpt4 book ai didi

java - 球离开屏幕

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:34 27 4
gpt4 key购买 nike

我一直在尝试制作一个弹跳球动画。除了一件事,我已经做对了一切。一旦球击中框架的下层和框架的右侧,球就会离开屏幕。

我已将条件设置为:

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

但是当球击中框架的下甲板和右甲板时,会消失一段时间。这是最终发生的事情: enter image description here

enter image description here

在第二张图片中,球击中了下层甲板并消失了一段时间。 为什么会这样?

如果这是我的完整代码:

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,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();
}
}

最佳答案

基本上这是因为您将 JFrame 设置为 200 像素高,这意味着您的面板将具有更小的高度(减去标题和边框)。

另外你的球从 (xpos, ypos) 延伸到 (xpos+diameter,ypos+diameter) 因此正确的条件是 y_Pos > frameHeight - ballDiameter 而不是 y_Pos > frameHeight - ballRadius

关于java - 球离开屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6339658/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com