我希望在生命结束后在pacman游戏中显示GameOver图像.但我调用paintGameOverScreen(Graphics g),然后我需要初始化g.有没有其他方法可以做到这一点?
这是我的Lives课程
import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.ImageIcon; public class Lives{ private int lives; public Lives() { lives = 1; } public void removeLife() { lives--; if(lives==0){ System.out.println("END GAME"); paintGameOverScreen(g); System.exit(0); } } public void paintGameOverScreen(Graphics g) { ImageIcon i = new ImageIcon("src\image"); Image image = i.getimage(); int x = 0; int y = 0; g.drawImage(image,x,y,100,null); } public void paint(Graphics g) { g.setColor(Color.WHITE); g.fillRect(5*20,25*20,30); g.setColor(Color.BLACK); String result = "Lives: " + lives; g.drawString(result,6*20,26*20); } }
解决方法
你永远不会自己调用paint()或paintComponent(),你总是通过repaint()来处理设置相应的Graphics
只是为了展示@mKorbel所指的内容:
import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.MalformedURLException; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.Timer; public class Lives extends JPanel { private int lives; private ImageIcon gameOverImage; public Lives() { try { gameOverImage = new ImageIcon(new URL("http://imgup.motion-twin.com/dinorpg/0/f/77acf80b_989624.jpg")); } catch (MalformedURLException e) { // Todo Auto-generated catch block e.printstacktrace(); } lives = 5; } public void removeLife() { if (lives > 0) { lives--; System.out.println("Left lives: " + lives); repaint(); } } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (lives > 0) { System.out.println("Still have " + lives + " lives"); g.setColor(Color.WHITE); g.fillRect(5 * 20,25 * 20,30); g.setColor(Color.BLACK); String result = "Lives: " + lives; g.drawString(result,6 * 20,26 * 20); } else if (gameOverImage != null) { System.out.println("Game over"); int x = (getWidth() - gameOverImage.getIconWidth()) / 2; int y = (getHeight() - gameOverImage.getIconHeight()) / 2; g.drawImage(gameOverImage.getimage(),gameOverImage.getIconWidth(),gameOverImage.getIconHeight(),this); } } @Override public Dimension getPreferredSize() { return new Dimension(800,600); } public static void main(String[] args) { SwingUtilities.invokelater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(Lives.class.getSimpleName()); frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); final Lives lives = new Lives(); frame.add(lives); frame.pack(); frame.setVisible(true); // Dummy timer that reduces the lives every second. For demo purposes only of course Timer t = new Timer(1000,new ActionListener() { @Override public void actionPerformed(ActionEvent e) { lives.removeLife(); } }); t.start(); } }); } }
原文地址:https://www.jb51.cc/java/120536.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。