我似乎无法解决问题所在。
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GamePanel extends JPanel implements Runnable, MouseMotionListener {
private static final int SCREEN_WIDTH = 640;
private static final int SCREEN_HEIGHT = 480;
private static final int INDENT = 20;
private int playerOneScore = 0;
private int playerTwoScore = 0;
private ImageEntity playerOne = new ImageEntity("Images/bouncer.bmp");
private ImageEntity playerTwo = new ImageEntity("Images/bouncer.bmp");
private int mouseX = 0;
private int mouseY = 0;
private BufferedImage gameScreen = new BufferedImage(SCREEN_WIDTH,
SCREEN_HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D gameScreenGraphics = gameScreen.createGraphics();
public GamePanel() {
paintBackground(gameScreenGraphics);
paintScore(gameScreenGraphics);
paintBouncers(gameScreenGraphics);
}
public void run() {
}
public void mouseMoved(MouseEvent m) {
mouseX = m.getXOnScreen();
mouseY = m.getYOnScreen();
}
public void mouseDragged(MouseEvent m) {
}
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(gameScreen, 0, 0, this);
}
private void paintBackground(Graphics2D g) {
g.setColor(Color.BLACK);
g.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
g.setColor(Color.WHITE);
for (int i = 0; i < 10; i++) {
g.fillRect(SCREEN_WIDTH / 2 - 5, i * SCREEN_HEIGHT / 10, 10,
(SCREEN_HEIGHT / 10) - 10);
}
}
private void paintScore(Graphics2D g) {
Font scoreFont = new Font("Impact", Font.PLAIN, 72);
g.setFont(scoreFont);
FontMetrics scoreFontMetrics = g.getFontMetrics();
g.drawString("" + playerOneScore, SCREEN_WIDTH / 2 - 30
- scoreFontMetrics.stringWidth("" + playerOneScore),
SCREEN_HEIGHT / 2);
g.drawString("" + playerTwoScore, SCREEN_WIDTH / 2 + 30,
SCREEN_HEIGHT / 2);
}
private void paintBouncers(Graphics2D g) {
g.drawImage(playerOne.getImage(), playerOne.getX(), playerOne.getY(),
this);
g.drawImage(playerTwo.getImage(), playerTwo.getX(), playerTwo.getY(),
this);
}
public static void main(String[] args) {
JFrame mainPane = new JFrame("Pong - Mrinank Sharma");
mainPane.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
mainPane.setVisible(true);
mainPane.setResizable(false);
GamePanel gp = new GamePanel();
mainPane.add(gp);
}
}
我运行此操作并最终获得灰色屏幕。有什么帮助吗?
ImageEntity
基本上是BufferedImage
的Image Wrapper类型。问题似乎在paintScore()
方法中,好像我注释了方法的调用,它按预期工作。这是我想要制作的乒乓球比赛。
答案 0 :(得分:5)
奇怪的是,这个单一的更改(经过多次更改后才能编译)修复了所述的问题:
Font scoreFont = new Font("Arial", Font.PLAIN, 72);
答案 1 :(得分:4)
从gamepanel()中删除paintcore,并在mainpanel.add(gp)之后将其添加到main中
gp.paintScore(gp.gameScreenGraphics);
但您的代码还有其他问题 将字体大小更改为24