2014-02-09 2 views
0

오른쪽 키를 누르면 새로운 그림이 나타나서 내 캐릭터가 걷는 것처럼 보입니다. 그렇게하는 방법은 확실하지 않습니다. .. 내 코드는 다음과 같습니다.키 입력했을 때 이미지를 변경하지 못했습니다

import java.awt.*; 


public class Dude { 
    int x, dx, y; 
    Image still; 

    public Dude() { 
      ImageIcon i = new ImageIcon("Ken3.png"); 
      ImageIcon ii = new ImageIcon("KenTurn1.png"); 
      still = i.getImage(); 
      x = 50; 
      y = 785; 
    } 


    public void move() { 
      x = x + dx; 
    } 

    public int getX() { 
      return x; 
    } 

    public int getY() { 
      return y; 
    } 

    public Image getImage() { 
      return still; 
    } 

    public void keyPressed(KeyEvent e) { 
      int key = e.getKeyCode(); 
      if (key == KeyEvent.VK_A) 
        dx = -2; 

      if (key == KeyEvent.VK_D) 
        dx = 2; 

      if (key == KeyEvent.VK_SPACE) 
       dx = 5; 

    } 

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

      if (key == KeyEvent.VK_A) 
        dx = 0; 

      if (key == KeyEvent.VK_D) 
        dx = 0; 

어떤 도움을 주셔서 감사합니다!

+0

간단한 방법으로 댓글에 적합 : 이미지 배열을 만든 다음 키를 누르면 이미지가 나타납니다. 배열 색인에 하나를 추가하여 그림을 변경합니다. –

+0

@ ns47741, 자바를 처음 접했을 때, 어떻게해야할지 모르겠다. – user3290474

답변

0

이와 비슷한 내용입니다. 행운을 빌어 요

public class Dude { 

    private int walkingIndex; 
    private Image walkingFrames; 
    private Image still; 

    private String state; 

    public Dude() { 
     // say were starting off standing 
     state = "standing"; 
     // init our still frame 
     still = (new ImageIcon("Ken3.png")).getImage(); 

     // set our walking frame to 0 to start 
     walkingIndex = 0; 
     walkingFrames = new Image[3]; // or however many images you have in your walking animation 
     // go through each frame and initialize the image to KenWalking{index}.png 
     for(int i=0;i<walkingFrames.length;i++) { 
      walkingFrames[i] = (new ImageIcon("KenWalking"+i+".png")).getImage(); 
     } 
    } 

    public void move() { 
     x+=dx; 
     // add 1 to the walking index and make sure its not greater than our number of walking frames, % means get the remainder of 
     // so 12 % 10 = 2, and 8 % 7 = 1 
     walkingIndex = (walkingIndex+1)%walkingFrames.length; 
    } 

    public Image getImage() { 
     // if our state is walking then give out a walking frame 
     if(state.equals("walking")) { 
      return walkingFrames[walkingIndex]; 
     } else { 
      // otherwise we can assume were standing, so show that image instead 
      return still; 
     } 
    } 

    public void keyPressed(KeyEvent e) { 
     ... same stuff 
     state = "walking"; 
    } 

    public void keyReleased(KeyEvent e) { 
     ... same stuff 
     state = "standing"; 
    } 
} 
+0

좋아, 정확히 'walking', 'standing'및 length (this walkingIndex = (walkingIndex + 1) % walkingFrames.length;)에 오류가 있습니다. 오류는 '서있는'및 '걷기'의 '유효하지 않은 문자 상수'라고 표시됩니다 ... 길이는 "길이를 확인할 수 없거나 필드가 아닙니다"라고 말함 – user3290474

0

나는이 질문을 올바르게 이해한다면, 당신은 keyListener를 찾고있다. 이 경우 두 가지 작업을 수행 할 수 있습니다. 키 바인딩을 추가하거나 KeyListener를 추가하십시오. 템플릿에있는 코드를 테스트하지 않았으므로 AWT 프레임에서 잘 작동한다는 점에 유의하십시오. 아래의 방법은 모든 KeyListener

로 구현됩니다

component.addKeyListener(this); 
    component.setFocusable(true); 
    component.setFocusTraversalKeysEnabled(false); 

..이

먼저 당신이 포커스 구성 요소가 있어야 작동 할 수있는 모든 KeyListener를 들어

public class Dude implements KeyListener{ ... 

를 야하기의 EventListener를 구현하는 데 도움이 희망

@Override 
public void keyPressed(KeyEvent e) { 
    int x = e.getKeyCode(); 

    switch(x){ 
     case KeyEvent.VK_UP: 
      // Do Your stuff 
      break; 
     case KeyEvent.VK_DOWN: 
      // Do Your stuff 
      break; 
     case KeyEvent.VK_RIGHT: 
      // Do Your stuff 
      break; 
     case KeyEvent.VK_LEFT: 
      // Do Your stuff 
      break; 
    } 
} 
관련 문제