[当我在Wxwidgets中进行游戏时。我被困住的地方是跳马里奥并在马里奥飞到空中时接受输入。让我澄清一下-玩家按空格键垂直跳跃时马里奥循环跳将运行,但是当玩家按下“ d”键向前移动时,它应该向前跳。...我也需要您的帮助,像在游戏中同时按shift时同时接受两个输入和“ w”,播放器将走得更快,但是当我们仅按“ w”键时,播放器将走得慢。]
void MyFrame :: OnChar(wxKeyEvent& event){
wxChar uc = event.GetUnicodeKey();
switch ( uc )
{
case 97:
tempx = x;
x = x - 5;
Check(x);
FindGround(x);
CheckForNextMove(x,y,CurrentGroundX,CurrentGroundY,PreviousGroundX,PreviousGroundY,NextGroundX,NextGroundY);
Refresh();
break;
case 100:
tempx =x;
x = x + 5;
Check(x);
FindGround(x);
CheckForNextMove(x,y,CurrentGroundX,CurrentGroundY,PreviousGroundX,PreviousGroundY,NextGroundX,NextGroundY);
Refresh();
break;
case 32:
tempy = y;
for(int i=0;i<=10;i++){
check = true;
tempx = x;
Sleep(1);
y=y-7;
x=x+5;
Check(x);
FindGround(x);
CheckForNextMove(x,y,CurrentGroundX,CurrentGroundY,PreviousGroundX,PreviousGroundY,NextGroundX,NextGroundY);
Update();
Refresh();
}
for(int j=0;j<=10;j++){
check = true;
tempx = x;
Sleep(1);
y=y+7;
x=x+5;
Check(x);
FindGround(x);
CheckForNextMove(x,y,CurrentGroundX,CurrentGroundY,PreviousGroundX,PreviousGroundY,NextGroundX,NextGroundY);
Update();
Refresh();
if(stop){ stop = false; break; }
}
check = false;
Update();
Refresh();
break;
}
event.Skip();
}
这是按空格键将使马里奥跳入抛物线的代码,但我想使其更加专业。当我们同时按下两个键时,我希望马里奥跳入抛物线形(即,当我按下垂直跳变键和右移键时,它必须沿抛物线路径向右跳变。
您需要更改程序控制流,以仅记住在wxEVT_KEY_{DOWN,UP}
处理程序中按下或释放了一个键,而不是尝试在wxEVT_CHAR
处理程序中进行所有操作。
而且,绝对不要在事件处理程序中对Sleep()
进行任何调用或长时间运行的循环,因此,无论何时考虑将其放在此处,都可以确保做错了什么。