如何在wxwidgets中进行多个键输入?

问题描述 投票:-2回答:1

[当我在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();
}

这是按空格键将使马里奥跳入抛物线的代码,但我想使其更加专业。当我们同时按下两个键时,我希望马里奥跳入抛物线形(即,当我按下垂直跳变键和右移键时,它必须沿抛物线路径向右跳变。

c++ wxwidgets
1个回答
0
投票

您需要更改程序控制流,以仅记住在wxEVT_KEY_{DOWN,UP}处理程序中按下或释放了一个键,而不是尝试在wxEVT_CHAR处理程序中进行所有操作。

而且,绝对不要在事件处理程序中对Sleep()进行任何调用或长时间运行的循环,因此,无论何时考虑将其放在此处,都可以确保做错了什么。

© www.soinside.com 2019 - 2024. All rights reserved.