(Java)如何导入和显示精灵?

(Java)如何导入和显示精灵?,java,image,sprite,draw,Java,Image,Sprite,Draw,如果这是一个无趣的问题,我很抱歉,但我真的需要帮助。 如何导入图像并在屏幕上绘制? 我想我需要使用BuffereImage,但是如何使用呢 包com.jonas.game import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame

如果这是一个无趣的问题,我很抱歉,但我真的需要帮助。 如何导入图像并在屏幕上绘制? 我想我需要使用BuffereImage,但是如何使用呢

包com.jonas.game

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;

public class Game extends JFrame implements Runnable{

private static final long serialVersionUID = 1L;
int WIDTH = 1024;
int HEIGHT = 576;
int SCALE = 1;
int heroX,heroY;
int x,y;

public static void main(String[] args) {
    new Game();
}

public Game(){

    setSize(WIDTH * SCALE, HEIGHT * SCALE);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setResizable(false);
    setTitle("BasicJava2DGame");
    setVisible(true);

    addKeyListener(new Input());

    heroX=getWidth()/2-16;
    heroY=getHeight()/2-16;

    try {
        while(true){
            update();
            Thread.sleep(20);
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}

public void paint(Graphics g){

    Image offScreen = createImage(getWidth(),getHeight());
    draw(offScreen.getGraphics());

    g.drawImage(offScreen,0,0,null);
}

public void draw(Graphics g){

    g.setColor(Color.GRAY);
    g.fillRect(0,0,getWidth(),getHeight());

    g.setColor(Color.BLUE);
    g.fillOval(heroX, heroY, 32, 32);

    g.setColor(Color.WHITE);
    g.fillOval(heroX+6,heroY+8,8,8);
    g.fillOval(heroX+18,heroY+8,8,8);

    g.setColor(Color.BLACK);
    g.fillOval(heroX+8, heroY+10, 4, 4);
    g.fillOval(heroX+20, heroY+10, 4, 4);

    g.fillRect(heroX+6, heroY+22, 20, 2);


    repaint();

}

public void setX(int x){
    this.x=x;
}
public void setY(int y){
    this.y=y;
}
public void update(){
    heroX+=x;
    heroY+=y;
}

public class Input implements KeyListener{

    public void keyPressed(KeyEvent e) {
        int keyCode=e.getKeyCode();

        if(keyCode==KeyEvent.VK_W){
            setY(-5);
        }
        if(keyCode==KeyEvent.VK_A){
            setX(-5);
        }
        if(keyCode==KeyEvent.VK_S){
            setY(5);
        }
        if(keyCode==KeyEvent.VK_D){
            setX(5);
        }
        if(keyCode==KeyEvent.VK_ESCAPE){
            stop();
        }
    }

    public void keyReleased(KeyEvent e) {
        int keyCode=e.getKeyCode();

        if(keyCode==KeyEvent.VK_W){
            setY(0);
        }
        if(keyCode==KeyEvent.VK_A){
            setX(0);
        }
        if(keyCode==KeyEvent.VK_S){
            setY(0);
        }
        if(keyCode==KeyEvent.VK_D){
            setX(0);
        }
    }

    public void keyTyped(KeyEvent e) {

    }

}

public void run() {
    new Thread().start();
}
public void stop(){
    System.exit(0);
}

}要加载,可以使用ImageIO.read:

BufferedImage image = ImageIO.read(new File(yourfilename));
要在JPanel上绘制,请获取其图形并使用drawImage方法:

Graphics g = panel.getGraphics();
g.drawImage(image, x, y, imageObserver (most likely null));

要加载,可以使用ImageIO.read:

BufferedImage image = ImageIO.read(new File(yourfilename));
要在JPanel上绘制,请获取其图形并使用drawImage方法:

Graphics g = panel.getGraphics();
g.drawImage(image, x, y, imageObserver (most likely null));

这是我的文件的来源。我希望它能起作用。我正在为此项目使用NetBeans:

package mygame;

import java.awt.*;
import java.io.File;
import javax.swing.*;

public class Main {

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("Name");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel emptyLabel = new JLabel();
        frame.add(new JLabel(new ImageIcon("Image path here")));
        emptyLabel.setPreferredSize(new Dimension(700, 400));
        frame.getContentPane().add(emptyLabel, BorderLayout.PAGE_START);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
        createAndShowGUI();
    }
});
}
}

这是我的文件的来源。我希望它能起作用。我正在为此项目使用NetBeans:

package mygame;

import java.awt.*;
import java.io.File;
import javax.swing.*;

public class Main {

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("Name");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel emptyLabel = new JLabel();
        frame.add(new JLabel(new ImageIcon("Image path here")));
        emptyLabel.setPreferredSize(new Dimension(700, 400));
        frame.getContentPane().add(emptyLabel, BorderLayout.PAGE_START);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
        createAndShowGUI();
    }
});
}
}

我想这可能有助于createImagegetWidth和getHeight做什么?还有,为什么你要画两次图形?你是说画画吗?一个是双重缓冲,一个是绘画游戏。是的,这就是我的意思。仍然不清楚createImage的内容。。是的。我想这可能有助于createImagegetWidth和getHeight做什么?还有,为什么你要画两次图形?你是说画画吗?一个是双重缓冲,一个是绘画游戏。是的,这就是我的意思。仍然不清楚createImage的内容。。是的。谢谢你的帮助,但我似乎无法让它工作。我将复制/粘贴用于游戏的代码,然后您可以帮助我实现它;如果你不知道为什么你不应该这样做定制绘画,那么搜索吧。可能每48小时讨论一次。谢谢你的帮助,但我似乎无法让它发挥作用。我将复制/粘贴用于游戏的代码,然后您可以帮助我实现它;如果你不知道为什么你不应该这样做定制绘画,那么搜索吧。可能每48小时讨论一次。