这是一种打破砖型游戏,用户不能让球落在球拍下方。顺便说一句,paddle_x设置了桨的x坐标。我有一个非常好的MouseListener,但KeyListener没有。我想知道我做错了什么,如果有人有任何建议。
public PaintSurface() {
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseMoved(MouseEvent e)
{
if (e.getX() - 30 - paddle_x > 5)
english = 1.5f;
else if(e.getX() - 30 - paddle_x < -5)
english = - 1.5f;
else
english = 1.0f;
paddle_x = e.getX() - 30;
}
});
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getID() == KeyEvent.KEY_TYPED){
if(e.getKeyChar() == KeyEvent.VK_RIGHT){
paddle_x += 30;
}
else if (e.getKeyChar() == KeyEvent.VK_LEFT){
paddle_x -= 30;
}
}
}
});
ball = new Ball(20);
}
答案 0 :(得分:3)
注册KeyListener
的组件必须focus
才能触发KeyListener
。在组件上调用requestFocus
以请求组件具有焦点,或使用KeyBindings(推荐)
此外,keyPressed
方法有一个条件,可以根据KeyEvent.KEY_TYPED
事件检查ID(这将永远不会发生)。