【发布时间】:2014-05-09 20:34:18
【问题描述】:
我正在制作足球比赛。我的问题是当我按下某个键并更改键以按下我的播放器时停止然后响应。就像我向左移动并按下向上按钮。我认为我的问题是因为我不支持按下多个键。所以我需要帮助我如何实现这个。这是我的代码
//add keylistener to window frame
window.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
switch (e.getKeyChar()) {
case KeyEvent.VK_ESCAPE: {
window.setVisible(false);
TeamMenu.setVisible(true);
MainMenu.setVisible(false);
g_SoccerPitch.canUpDate = false;
}
break;
case 'r':
case 'R': {
SoccerPitchLock.lock();
g_SoccerPitch = null;
g_SoccerPitch = new SoccerPitch(cxClient, cyClient);
SoccerPitchLock.unlock();
}
break;
case 'p':
case 'P': {
g_SoccerPitch.TogglePause();
}
break;
}//end switch
}//end switch }
@Override
public void keyPressed(KeyEvent e) {
if(g_SoccerPitch.GameOn() && g_SoccerPitch != null){
switch (e.getKeyChar()) {
case 'w':
case 'W':{
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().MoveUp();
chaseBall();
}
break;
case 's':
case 'S':{
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().MoveDown();
chaseBall();
}
break;
case 'a':
case 'A':{
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().MoveDown();
chaseBall();
}
break;
case 'd':
case 'D':{
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().MoveRight();
chaseBall();
}
break;
case 'm':
case 'M':{
//shoot ball if ball withinin kicking range and team is in control
if(g_SoccerPitch.UserControlledTeam.InControl() && g_SoccerPitch.UserControlledTeam.UserControlledPlayer().BallWithinKickingRange()){
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().UserPlayerShootBall();
}
}
break;
case 'l':
case 'L':{
//if team in control pass the ball else chase the ball
if(g_SoccerPitch.UserControlledTeam.InControl()){
if(g_SoccerPitch.UserControlledTeam.UserControlledPlayer().BallWithinReceivingRange()){
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().UserPlayerPassBall();
}
} else{
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().Steering().SeekOn();
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().Steering().SetTarget(g_SoccerPitch.Ball().m_vPosition);
if(g_SoccerPitch.UserControlledTeam.UserControlledPlayer().AtTarget()){
g_SoccerPitch.UserControlledTeam.UserControlledPlayer().Steering().SeekOff();
}
}
}
break;
}//end switch
}//end switch
}//closes if
});
【问题讨论】:
-
所以我猜你希望能够沿对角线移动?按键始终是单个原子界面输入。最好的办法是看看如何同时抓住两台压力机,以及需要什么样的设计!
标签: java