我是程序设计的初学者,我一直在从事一个名为Tetris的著名小游戏,而我遇到了这个小问题,希望您能为我提供解决方案。我导入了:import java.awt.event.KeyAdapter
和import java.awt.event.KeyEvent
可以使用键盘玩游戏,但是当我扩展为使用键而创建的类时,它向我显示错误!
这是代码:
addKeyListener(new TAdapter());
错误发生在这里这样说:
The method addKeyListener(keyListener) in the type Component is not applicable for the arguments(Board.TAdapter)
类TAdapter扩展keyAdapter {//第二个发生在这里:keyAdapter不能//解析为一个类型
public void keyPressed(keyEvent e){//第三次发生在这里:keyEvent //无法解析为类型
if (!isStarted || curPiece.getShape() == Tetrominoes.NoShape) {
return;
}
int keycode = e.getKeyCode();
if (keycode == 'p' || keycode == 'P') {
pause();
return;
}
if (isPaused)
{return;}
switch (keycode) {
case KeyEvent.VK_LEFT:
tryMove(curPiece, curX - 1, curY);
break;
case KeyEvent.VK_RIGHT:
tryMove(curPiece, curX + 1, curY);
break;
case KeyEvent.VK_DOWN:
tryMove(curPiece.rotateRight(), curX, curY);
break;
case KeyEvent.VK_UP:
tryMove(curPiece.rotateLeft(), curX, curY);
break;
case KeyEvent.VK_SPACE:
dropDown();
break;
case 'd':
oneLineDown();
break;
case 'D':
oneLineDown();
break;
}
}
最佳答案
您应该避免使用KeyListener
,因为它们有很多与焦点相关的问题,它们还会使您的代码膨胀,并使管理更加困难。
相反,您应该利用Key Bindings API,它提供了更可重用的API,并提供了确定组件接收关键事件所需的焦点级别的方法。