我期望的输出是在屏幕上滚动的管道,如下所示。我当前得到的输出似乎仅部分显示。我真的不确定这个问题是否由我的代码引起。如果问题不在我的代码中,那么有人有什么建议吗?
预期产量
我目前得到的输出
游戏类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
public class Game {
Pipes panel = new Pipes();
public Game() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(panel);
f.setTitle("Pipe Game");
f.setResizable(false);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
Timer timer = new Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.move();
panel.repaint();
}
});
timer.start();
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Game();
}
});
}
}
Pipes.class
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Pipes extends JPanel {
//Declare and initialiaze variables
int x1 = 754; //xVal start
int x2 = 75; //pipe width
int y1 = -1; //yVal start
int y2 = setHeightVal(); //pipe height
int gap = 130; //gap height
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0,0,750,500); //Clear screen
g.drawRect(x1,y1,x2,y2); //Draw part 1
g.drawRect(x1-3,y2-1,x2+6,25); //Draw part 2
g.drawRect(x1-3,y2+25+gap,x2+6,25); //Draw part 3
g.drawRect(x1,y2+25+gap+25,x2,500-y2-49-gap); //Draw part 4
}
public void move() {
x1--;
}
public int getMyX() {
return x1-3;
}
public int getMyY() {
return y2+25;
}
public int setHeightVal() {
int num = (int)(9*Math.random() + 1);
int val = 0;
if (num == 9)
{
val = 295;
}
else if (num == 8)
{
val = 246;
}
else if (num == 7)
{
val = 216;
}
else if (num == 6)
{
val = 185;
}
else if (num == 5)
{
val = 156;
}
else if (num == 4)
{
val = 125;
}
else if (num == 3)
{
val = 96;
}
else if (num == 2)
{
val = 66;
}
else
{
val = 25;
}
return val;
}
@Override
public Dimension getPreferredSize() {
return new Dimension(751, 501);
}
}
最佳答案
这个问题肯定是由您的代码引起的:您覆盖了JPanel的getX()
和getY()
方法而没有意识到,这弄乱了JPanel的固有位置。请将这些方法的名称更改为getMyX()
和getMyY()
,您的代码可能会更好地工作。
同样,您几乎可以保证,类似的错误是由于我们的代码而不是Java引起的,至少这是我的经验。因此,从假设错误是您的错误开始,您几乎总是对的。
同样,此问题说明了扩展复杂类的一种风险,以及为什么要尽量减少继承并尽可能地支持组合。
关于java - 意外的输出显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21567437/