(Java)如何导入和显示精灵?
如果这是一个无趣的问题,我很抱歉,但我真的需要帮助。 如何导入图像并在屏幕上绘制? 我想我需要使用BuffereImage,但是如何使用呢 包com.jonas.game(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
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小时讨论一次。