2013-02-02 1 views
1

불쾌한 질문이지만 미안하지만이 문제에 대해 정말 도움이 필요합니다. 이미지를 가져 와서 화면에 그릴 수 있습니까? BufferedImage를 사용해야 겠지만 어떻게해야합니까?(Java) 스프라이트를 가져오고 표시하려면 어떻게해야합니까?

package 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); 
} 

}

+1

난이 도움이 될 것 같아요 http://stackoverflow.com/questions/1626735/how-can-i-display-a-bufferedimage-in-a-jframe – kaysush

+0

:이 프로젝트 넷빈즈를 사용하고 있습니다 createImage (getWidth(), getHeight())는 무엇을합니까? 또한 왜 그래픽을 두 번 그립니까? –

+0

페인트와 무승부를 의미합니까? 하나는 더블 버퍼링, 하나는 게임을 그리는 것입니다. – sanoj00

답변

4

당신이 ImageIO.read 사용할 수 있습니다로드하려면 :

BufferedImage image = ImageIO.read(new File(yourfilename)); 

의 drawImage 방법, 인 JPanel에 그릴의 그래픽을 얻을 사용하려면 :

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

도움을 주셔서 감사합니다. 그러나 작동시키지 못합니다. 내가 게임에 사용하고있는 코드를 복사/붙여 넣기하고 나서 그것을 구현하도록 도울 수 있습니다. – sanoj00

+0

'Graphics g = panel.getGraphics();'사용자 정의 그림을 그렇게하지 않는 이유를 모른다면 ** 검색을하십시오. 아마 48 시간마다 논의됩니다. –

0

내 파일의 출처는 다음과 같습니다. 나는 그것이 효과가 있기를 바란다.

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(); 
    } 
}); 
} 
}