2013-10-03 3 views
0

내 이미지가 움직이지 않습니다. 그것은 잘못 무엇이미지가 움직이지 않습니다

package Game; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Game extends JPanel { 

    private static final long serialVersionUID = 1L; 

    private BufferedImage image; 

    public static final int WIDTH = 600; 
    public static final int HEIGHT = 500; 
    private int x = 1; 
    private int y = 1; 

    private static int dx; 
    private static int dy; 

    private boolean leftPressed = false; 
    private boolean rightPressed = false; 
    private boolean topPressed = false; 
    private boolean downPressed = false; 

    public static void main(String avg[]) throws IOException { 
     Game abc = new Game(); 

    } 

    public Game() { 
     try { 
      JFrame frame = new JFrame(); 
      image = ImageIO.read(new File(
        "C:\\Users\\дНМ\\workspace\\Game\\image\\heroG.png")); 

      frame.setSize(WIDTH, HEIGHT); 
      frame.setVisible(true); 
      frame.getContentPane().add(this); 
      this.setBackground(Color.BLACK); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setTitle("Tittle - Game"); 
      addKeyListener(new KeyInputHandler()); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 



    public void move() { 

     x += dx; 
     y += dy; 

     if (x < 1) { 
      x = 1; 
     } 

     if (y < 1) { 
      y = 1; 
     } 
    } 

    public void update(long delta) { 
     if (leftPressed == true) { 
      x--; 
     } 
     if (rightPressed == true) { 
      x++; 
     } 
    } 

    public void update2(long delta) { 
     if (downPressed == true) { 
      y--; 
     } 
     if (topPressed == true) { 
      y++; 
     } 
    } 

    private class KeyInputHandler extends KeyAdapter { 
     public void keyPressed(KeyEvent e) { 
      if (e.getKeyCode() == KeyEvent.VK_LEFT) { 
       leftPressed = true; 
       dx = -1; 
      } 
      if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
       rightPressed = true; 
       dx = 1; 
      } 
      if (e.getKeyCode() == KeyEvent.VK_UP) { 
       topPressed = true; 
       dy = -1; 
      } 
      if (e.getKeyCode() == KeyEvent.VK_DOWN) { 
       downPressed = true; 
       dy = 1; 
      } 
     } 

     public void keyReleased(KeyEvent e) { 
      if (e.getKeyCode() == KeyEvent.VK_LEFT) { 
       leftPressed = false; 
       dx = 0; 
      } 
      if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
       rightPressed = false; 
       dx = 0; 
      } 
      if (e.getKeyCode() == KeyEvent.VK_UP) { 
       topPressed = false; 
       dy = 0; 
      } 
      if (e.getKeyCode() == KeyEvent.VK_DOWN) { 
       downPressed = false; 
       dy = 0; 
      } 
     } 
    } 
    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, x, y, null); 
    } 
} 

: 여기
응용 프로그램의 전체 코드는?
추가해야 할 수도있는 오류를 나타내십시오.

+0

모든 프로그램,하지만 당신을 왜 누르면 사진이 –

+0

를 이동하지 않습니다 그것이 움직여야한다고 생각하니? –

+0

글쎄, 나는 운동 방법을 썼지 만 그들은 분명히 작동하지 않는다. 무엇이 잘못되었는지 말할 수 있니? –

답변

1

먼저 : 귀하의 패널 키 이벤트를 차단하지 않는이 같은 다른 질문을 확인하십시오 addKeyListener() doesn't work for JPanel

둘째 : 당신은 dx 변수를 변경하고 dy 키를 누를 때, 그러나 당신이 호출되지 않습니다 move() 방법

세 번째 각 키를 누른 후에 다시 칠하지 않습니다.

가 수정됩니다

게임 생성자

public Game() { 
    try { 
     JFrame frame = new JFrame(); 
     image = ImageIO.read(new File("Zombatar.jpg")); 

     frame.setSize(WIDTH, HEIGHT); 
     frame.setVisible(true); 
     frame.getContentPane().add(this); 
     this.setBackground(Color.BLACK); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setTitle("Tittle - Game"); 

     addKeyListener(new KeyInputHandler()); 

     //this is important to intercept key events 
     setFocusable(true); 
     requestFocusInWindow(); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

KeyAdapter

private class KeyInputHandler extends KeyAdapter { 

    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_LEFT) { 
      dx = -1; 
     } 
     else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
      dx = 1; 
     } 
     else if (e.getKeyCode() == KeyEvent.VK_UP) { 
      dy = -1; 
     } 
     else if (e.getKeyCode() == KeyEvent.VK_DOWN) { 
      dy = 1; 
     } 

     //first call move to update x and y and later repaint tha JPanel 
     move(); 
     repaint(); 
    } 
} 
+0

정말 고마워요! –

+0

@IvanCern 당신은 환영합니다. – omainegra

관련 문제