4
"간단한 tetras"게임을 시작 코더로 사용하려고합니다. 아래에 표시된 코드와 같이 흰색 블록은 화살표 키를 눌러 움직일 수 있지만 타이머에서는 (y = y + 10
)을 수행하지 못합니다. 내 생각 엔 ActionListener
이 잘못된 위치에 놓여있는 것 같습니다. 내가하고 싶은 것은 그것이 내려갈 때 블록을 좌우로 움직일 수 있어야한다는 것입니다. 여기 ActionListener를 올바르게 사용하는 방법은 무엇입니까?
import java.awt.event.*;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Experiment extends JFrame {
int x = 100;
int y = 100;
ASD exp = new ASD();
public Experiment() {
add(exp);
exp.setFocusable(true);
}
public class ASD extends JPanel {
public ASD() {
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
//case KeyEvent.VK_DOWN: y += 10;break;
//case KeyEvent.VK_UP: y -= 10; break;
case KeyEvent.VK_LEFT:
x -= 10;
break;
case KeyEvent.VK_RIGHT:
x += 10;
break;
}
repaint();
}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.BLACK);
g.setColor(Color.WHITE);
g.fillRect(x, y, 30, 30);
}
public class Movement extends JPanel implements ActionListener {
Timer tm = new Timer(5, this);
public void actionPerformed(ActionEvent e) {
y = y + 10;
repaint();
}
}
}
public static void main(String[] args) {
Experiment frame = new Experiment();
frame.setTitle("ASD");
frame.setSize(600, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}