2014-07-14 7 views
0

먼저, 코드 하단에 자세한 설명을 게시합니다.부울을 편집/업데이트하려고 시도했지만 무언가가 작동하지 않습니다.

여기는 첫 번째 클래스 인 Player입니다.

package main; 
import main.Screen; 
import main.Keyboard; 

public class Player extends Mob { 

    private Keyboard input = new Keyboard(); 

    private int color = 0x0066CC; 
    private int xPos = 50; 
    private int yPos = 50; 
    private int xSize = 10; 
    private int ySize = 10; 

    public Player() { 

    } 

    public void render(Screen screen) { 
     screen.addSquare(xPos, yPos, xSize, ySize, color); 
     return; 
    } 

    public void update() { 
     this.input.update(); 
     if (input.up == true) { 
      xPos = xPos + 1; 
     } 
     System.out.println("xPos is " + xPos); 
    } 
} 

다음은 두 번째 클래스 인 Keyboard입니다.

package main; 

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

public class Keyboard implements KeyListener { 

    private boolean[] keys = new boolean[120]; 

    public boolean up, down, left, right; 

    public void update() { 
     System.out.println("Reached 3"); 
     up = keys[KeyEvent.VK_UP] || keys[KeyEvent.VK_W]; 
     down = keys[KeyEvent.VK_DOWN] || keys[KeyEvent.VK_S]; 
     left = keys[KeyEvent.VK_LEFT] || keys[KeyEvent.VK_A]; 
     right = keys[KeyEvent.VK_RIGHT] || keys[KeyEvent.VK_D]; 

     System.out.println("up " + up + ", down " + down + ", left " + left + ", right " + right); 
    } 

    public void keyPressed(KeyEvent e) { 
     keys[e.getKeyCode()] = true; 
    } 

    public void keyReleased(KeyEvent e) { 
     keys[e.getKeyCode()] = false; 
    } 

    public void keyTyped(KeyEvent e) { 

    } 
} 

우리가 가지고 있습니다. 문제는 Keyboard 클래스에 있습니다. 내가하는 일과 상관없이 키에 따라 부울을 업데이트 할 수 없습니다.

는합니다 (Player.update() 방법은 컴퓨터가 할 수있는 한, 그 업데이트되는에 오류 아니라 자주이라고합니다.)

내가 필요한 것을 명확히 알 수있을 것입니다.

감사합니다.

+0

keyPressed/release 메소드에서 인쇄 호출을 시도하여 호출이 제대로 수행되는지 확인하십시오. 또한 플레이어 필드를 inividually 대신에 ['Rectangle'] (http://docs.oracle.com/javase/8/docs/api/java/awt/Rectangle.html)에 저장하는 것을 고려하십시오 – vandale

+1

다른 코드에서는 표시되지 않습니다. 키보드 클래스를 일부 컨트롤 (예 : somecontrol.addKeyListener (input))에 등록하고 있습니까? 키보드를 들으려면 무엇을해야할지 모르기 때문에 그렇게해야합니다. –

+1

귀하의 Keyboard 클래스는 KeyListener를 구현하지만 실제로 그것을 추가하고 있습니까? 여기 게시 한 코드 어디에서나 그렇게하는 것은 아닙니다. – Carmeister

답변

0

KeyListenerPlayer 클래스에 등록되어 있지 않으므로 값이 변경되지 않습니다.

당신은 KeyEvent API 당신이 키 이벤트에 관한 다음 설명을 찾을 살펴 걸릴 경우

이 낮은 수준의 이벤트가 구성 요소 객체에 의해 생성됩니다 (예 : 텍스트 필드 등) 할 때 키를 눌렀거나, 놓았거나, 타이핑되었습니다. 이벤트는 이며, 구성 요소의 addKeyListener 메소드를 사용하여 에 등록 된 모든 KeyListener 또는 KeyAdapter 객체에 전달됩니다. (KeyAdapter 객체는 KeyListener 인터페이스를 구현합니다.) 각 청취자 객체는 이벤트가 발생할 때이 KeyEvent를 가져옵니다.

기본적으로 이러한 주요 이벤트가 발생하기 위해서는 KeyListener or KeyAdapter`를 사용하여 등록해야합니다.

link에서 이러한 이벤트를 잘 볼 수 있습니다.

관련 문제