我想在Java中制作pong游戏,但它不起作用。 我直接做了一些测试,似乎变量更新,但是,当我在做定时器 repaint();
actionPerformed(ActionEvent e)
不调用paintComponent()
方法repaint()不调用paintComponent()
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PongGame extends JComponent implements ActionListener, MouseMotionListener{
public int state = 1;
public int paddleX;
public String buttonColor = "blue";
public int mouseX, mouseY;
private int ballX = 400;
private int ballY = 150;
public static void main(String[] args){
JFrame window = new JFrame("Pong");
PongGame game = new PongGame();
window.add(new PongGame());
window.pack();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setLocationRelativeTo(null);
window.setResizable(false);
window.setVisible(true);
Timer t = new Timer(20, game);
t.start();
}
public Dimension getPreferredSize(){
return new Dimension(800, 600);
}
public void paintComponent(Graphics g){
paddleX = mouseX;
g.setColor(Color.WHITE);
g.fillRect(0,0, 800, 600);
g.setColor(Color.BLACK);
g.fillRect(paddleX, 550, 150, 15);
g.fillOval(ballX, ballY, 30, 30);
}
@Override
public void actionPerformed(ActionEvent e) {
ballX = ballX + 10;
ballY = ballY + 10;
System.out.println(ballX + " " + ballY);
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
mouseX = e.getX();
repaint();
}
}
你的建议对于AWT是有好处的,但不适用于不应该调用update()的应用程序,除非它被调用来更新外观和感觉。 –
另请参见:[查看编辑](http://stackoverflow.com/posts/20573439/revisions)以了解如何创建“有序列表”。请在句子开头添加大写字母。还要为单词I使用大写字母,并使用JEE或WAR等缩写词和首字母缩略词。这使人们更容易理解和帮助。 –
有关更多详细信息,请参阅Oracle的文章[使用Swing和AWT绘画](http://www.oracle.com/technetwork/java/painting-140037.html),查看它们为什么陈述'“...原因update()永远不会在Swing组件上调用...“。 –