以下代码无效。我正在尝试使用按键方法向左,向右,向上和向下移动玩家但是当我按下按键时它没有响应。我没有粘贴整个代码只是移动框的部分还有其他if语句来实现其他内容的移动。
public class innerClassKeyPressed {
void keyPressed( KeyEvent e)
{
int key= e.getKeyCode();
if(key==KeyEvent.VK_LEFT){
dx=-1;
}
if(key==KeyEvent.VK_RIGHT){
dx=1;
}
if (key==KeyEvent.VK_UP){
dy=-1;
}
if (key==KeyEvent.VK_DOWN){
dy=1;
}
if (key == 82)
{
initLevel(currlevel);
} //R
if (key == 78)
{
currlevel++;
initLevel(currlevel);
}
if ( (key == KeyEvent.VK_LEFT ) && ( key == KeyEvent.VK_RIGHT ) &&
(key == KeyEvent.VK_UP ) && ( key == KeyEvent.VK_DOWN )) {
return;
}
for (int row=0; row < myArray.length; row++)
{
for (int column=0; column < myArray[row].length; column++)
{
if( myArray[row][column]== Contents.PLAYER) {
if (myArray[row+dy][column+dx] == Contents.BOX)
{
if (myArray[row+dy*2][column+dx*2] == Contents.EMPTY)
{
myArray[row+dy][column+dx]= Contents.PLAYER;
myArray[row][column]= Contents.EMPTY;
myArray[row+dy*2][column+dx*2]= Contents.BOX;
答案 0 :(得分:1)
KeyListeners
因不工作而臭名昭着(事实上他们确实这样做,而不是你认为的那样)。
KeyListener
的问题在于,只有当他们注册的组件可以聚焦并具有焦点(也称为键盘焦点)时,他们才会做出反应。
相反,您应该使用Key Bindings,因为它们可以确定触发它们的焦点状态。
答案 1 :(得分:0)
当我猜你使用JFrame和Canvas绘制你的播放器时,我也会认为这不起作用,因为你还没有将KeyListener添加到JFrame。
例如:
JFrame frame = new JFrame();
frame.addKeyListener(keylistener);