今天研究贪吃蛇安卓代码的时候,发现onKeyDown对按键无反应。
经过调试发现需要加上setFocusable(true);
public void update(){
this.setFocusable(true);
long newTime=System.currentTimeMillis();
if((newTime-oldTime)>delays){
Coordinate nowPos=getPos();
System.out.println(direction);
Coordinate nowOrder=moveOrder();
setPos(nowPos.x+nowOrder.x*myTileSize,nowPos.y+nowOrder.y*myTileSize);
oldTime=newTime;
}
myRefreshHandler.sleep(delays);
}
@Override
public boolean onKeyDown(int keyCode,KeyEvent msg){
switch(keyCode){
case KeyEvent.KEYCODE_DPAD_DOWN:
direction=SOUTH;
return(true);
case KeyEvent.KEYCODE_DPAD_UP:
direction=NORTH;
return(true);
case KeyEvent.KEYCODE_DPAD_LEFT:
direction=WEST;
return(true);
case KeyEvent.KEYCODE_DPAD_RIGHT:
direction=EAST;
return(true);
}
return super.onKeyDown(keyCode,msg);
}
public Coordinate moveOrder(){
Coordinate newOrder=new Coordinate(0,0);
switch(direction){
case NORTH: {
newOrder.x = 0;
newOrder.y = -1;
break;
}
case SOUTH:{
newOrder.x=0;
newOrder.y=1;
break;
}
case WEST:{
newOrder.x=-1;
newOrder.y=0;
break;
}
case EAST:{
newOrder.x=1;
newOrder.y=0;
break;
}
}
return newOrder;
}
在开发Android贪吃蛇游戏时遇到onKeyDown事件不响应的问题,通过调试发现需要设置setFocusable(true)来使组件获取焦点,从而能够监听到按键事件。在update方法中添加此行代码后,按键事件开始正常工作,允许蛇根据DPAD方向键改变移动方向。
1543

被折叠的 条评论
为什么被折叠?



