죄송합니다. 이전 질문 How to detect a key press in Java이 작동하지 않았습니다.Java v2에서 키 누르기 감지
나는 여러 동영상을 보았고 그 중 키릴 마스터에 대한 기사를 보았지만 아무도 작동하지 않았습니다. 전화해야한다는 것을 알고 있습니다.
repaint();
좌표를 업데이트하면 나를 표시하지 않습니다. 나는 그것이 움직 이도록하기 위해 keyListener를 사용해야 만한다는 것을 알고있다. 키를 누르고 있으면 내 (PNG) 그래픽이 선택한 방향으로 움직입니다.
또한 내 손가락이 그 키를 누르지 않을 때까지 계속 움직일 수 있습니다. 그리고 A와 D를 누르면 대각선으로 움직일 것이라고합니다.
내 코드에 어떤 문제가 있는지 알 수 없지만 여기에 내 코드가 있습니다 (이클립스 표준 kelper 7.4를 사용합니다). 나는 또한 한 번에 화면에 2 PNG 이미지를 넣으려고했는데, 그것은 단지 1을 표시했다? 내가 어떻게 그걸 막을 수 있니? 또한 내 배경이 검은 색이 아닌 이유는 무엇입니까?
import javax.swing.*;
import java.awt.*;
public class window {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame f = new JFrame();
f.setSize(600,600);
f.setBackground(Color.BLACK);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setLocationRelativeTo(null);
f.setResizable(true);
f.setAlwaysOnTop(true);
player player = new player();
f.add(player);
}
}
//I do seem to have a few errors throughout my code. this is because of the KeyListener
//The player class(this one has the keylistener problem)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
public class player extends JPanel implements KeyListener, ActionListener{
private ImageIcon image;
int x = 0;
int y = 0;
public boolean right = false;
public boolean left = false;
public player(Display f){
f.addKeyListener(new KeyAdapter(){
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_D){
right = false;
}
}});
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.setBackground(Color.BLACK);
image = new ImageIcon("neonShip.png");
image.paintIcon(this, g, x, y);
if(right){
x += 1;
}
repaint();
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
//Next is the Display class
import java.awt.*;
import javax.swing.*;
public class Display extends JFrame{
public JPanel gp = (JPanel) getGlassPane();
public Images i;
public player k;
public Display(){
i = new Images();
gp.setVisible(true);
k = new player(this);
gp.setLayout(new GridLayout(1,1,0,0));
this.setLayout(new GridLayout(1,1,0,0));
gp.add(k);
this.add(i);
}
}
내가 가지고있는 몇 가지 오류에 대해 너무 죄송하지만 코드 내 최선을 다했다 :
여기 내 코드입니다. 내 keyListener 또는 문제가 무엇입니까. 이 문제를 해결하는 방법을 설명하십시오.
훌륭한 답변을 보내 주신 user783920! 어떻게하면 다른 키를 구현하고 나타나는 흰색 플래시를 없앨 수 있습니까? 또한 어떻게 운동 속도를 높일 수 있을까요? 나는 코드를 복사 할 때 속도 변수를 보지 못했습니다. – user3343497
'KeyListener'를 계속 사용하고 싶다면'e.getKeyCode(). '를 통해'switch'할 수 있습니다. 그러나 @camickr가 지적했듯이'Key Bindings '는 스윙에있어 더 나은 연습으로 간주됩니다. "속도"는 'if (pressingA)'에서 1로 하드 코딩되었습니다. "화이트 플래시"가 무슨 뜻인지 잘 모르겠습니다. – user783920
좋아, 내가 keybindings 좀 봐야 겠어 '하드 코딩 된'로 무엇을 의미합니까? 나는 실제로 그것이 1 밀리 초 동안 어떻게 사라 졌는지를 의미하고 다시 돌아옵니다. 그것이 화면에없는 작은 공간을 남깁니다. 내가 어떻게 그걸 막을 수 있니? – user3343497