首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加pacman图像

添加pacman图像
EN

Stack Overflow用户
提问于 2012-12-06 06:39:47
回答 1查看 712关注 0票数 3

我是Ap计算机科学的学生,本课程的项目是创建一个您选择的游戏。我正在创造一个吃豆人的游戏。我们在GUI方面的工作还不多,所以我对整个概念仍然非常陌生,但到目前为止,这就是我所拥有的:

代码语言:javascript
复制
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;


public class GameHandler extends JFrame{


JPanel jpanel = new JPanel();
Graphics g;
BufferedImage pacman;
int frame;
int direction;
int x, y;
//final int STEP = 2; If you want to change the speed at which pacman moves accross the screen;

public void popupWindow() {
    setSize(400, 400);
    setResizable(false);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame = 0;
    direction = KeyEvent.VK_LEFT;
    x = 300;
    y = 300;

    try {
        pacman = ImageIO.read(new File("pacman.png"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();


    }
          image();
}

public void keyPressed(KeyEvent e) {
    direction = e.getKeyCode();
}


public void update() {
    frame++;
    if (frame > 2) {
        frame = 0;
    }

    switch(direction) {
        case KeyEvent.VK_LEFT:
            x--;
            break;
        case KeyEvent.VK_RIGHT:
            x++;
            break;
        case KeyEvent.VK_UP:
            y--;
            break;
        case KeyEvent.VK_DOWN:
            y++;
            break;
    }
}

public void image() {   
    super.paintComponents(g);
    g.drawImage(pacman.getSubimage(frame*10, 0, 37, 30), x, y, null);
}
}

我的问题是,我无法将这个图像输出到屏幕上(我知道,由于没有任何输出,我无法调整g.drawImage dimensiones )。

当我试图在image()方法中调用popupWindow()方法时,会得到以下错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:70)
at java.awt.Container.paintComponents(Container.java:1890)
at GameHandler.image(GameHandler.java:69)
at GameHandler.popupWindow(GameHandler.java:38)
at Main.main(Main.java:7)

我尝试在不同的位置调用图像方法,并在try/catch中调用。我迷路了。

EN

回答 1

Stack Overflow用户

发布于 2012-12-06 06:43:07

代码语言:javascript
复制
public void image() {   
    super.paintComponents(g);
    g.drawImage(pacman.getSubimage(frame*10, 0, 37, 30), x, y, null);
}

g尚未设置为在此方法中使用。您的类定义了Graphics g;,但是它没有在任何地方设置!所以,你会问,我该怎么设置它?Graphics对象从何而来?

当前代码库的最快答案可能是:

代码语言:javascript
复制
JPanel jpanel = new JPanel();
Graphics g = jpanel.getGraphics();

但这根本不是一个理想的解决方案。

通常,这种代码模式可以在paintComponent中找到。

你应该瞄准的是这样的东西:

代码语言:javascript
复制
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(...);
}

您可以在任何paintComponent上重写JComponent,如JPanel (JComponent的子类)。所以,我向你推荐的是

  • 添加一个重写JPanel的新类
  • 使用JFrame.setContentPane()将其设置为主JFrame的内容窗格
  • 覆盖面板中的paintComponent
  • 使用该面板进行任何UI更改(只有JFrame上的顶级内容,内容窗格中的其他内容)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13738248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档