(Java) 如何导入和显示精灵?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14661571/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
(Java) How can I import and display sprites?
提问by sanoj00
I'm sorry if this is a noobish question, but I really need help with this. How can I import an image, and draw it on the screen? I suppose I need to use a BufferedImage, but how?
如果这是一个菜鸟问题,我很抱歉,但我真的需要帮助。如何导入图像并将其绘制在屏幕上?我想我需要使用 BufferedImage,但如何使用?
package com.jonas.game;
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);
}
}
}
回答by Daniel Cisek
To load you can use ImageIO.read:
要加载,您可以使用 ImageIO.read:
BufferedImage image = ImageIO.read(new File(yourfilename));
In order to draw on a JPanel, get its Graphics and use drawImage method:
为了在 JPanel 上绘图,获取它的 Graphics 并使用 drawImage 方法:
Graphics g = panel.getGraphics();
g.drawImage(image, x, y, imageObserver (most likely null));
回答by g-madness5
Here is the source for my file. I hope it works. I'm using NetBeans for this project:
这是我的文件的来源。我希望它有效。我在这个项目中使用 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();
}
});
}
}