1

我正在创建这个 2D 游戏,但我遇到了 Jump 功能的问题。它有效,角色上下跳跃,但我希望能够在角色在空中跳跃然后移动角色,例如它可以跳到平台上。我正在使用 SDLK...

case SDL_KEYDOWN:   
        switch (event.key.keysym.sym){
            RArrow = (event.button.button = SDLK_RIGHT);
            Jump = (event.button.button = SDLK_SPACE);

            if((RArrow) && (Jump))
            {
            if(g->getPlayer()->worldY = GROUND_LEVEL)
                {
                    g->getPlayer()->jump();
                    g->getPlayer()->move(10);
                }
            }
            break;

这是我尝试过的方法之一。我还尝试在跳转案例中创建一个切换功能以向左或向右导航,但我要么没有正确编码,要么就是没有工作。

4

2 回答 2

0

我不熟悉 SDLK 以及这在实际游戏开发中是如何完成的。但是,我实现这一点的一种方法是查看是否在每个游戏滴答声上都按下了两个键。因此,如果按下 w+d,角色将同时向上和向右。但在我看来,这是一个骇人听闻的解决方案。

于 2012-11-06T22:12:22.677 回答
0

列出实现后,看起来角色只有在地面上时才会向右移动。您需要更改代码,以便每次滴答声,游戏都会检查角色是否在跳跃,如果是,则将角色朝其面对/跳跃的方向移动。此代码可能需要位于您的事件处理程序之外。

理想情况下,您的键盘事件处理程序只需在角色上设置一个标志,指示他们正在跳跃以及向哪个方向跳跃,然后在您的游戏循环中调用 update() 方法,该方法实际处理跳跃(并在角色碰撞时停止跳跃)世界几何,如地板或墙壁)。

希望这可以帮助!

编辑:

没有看到你的代码的其余部分,我不能说更多。我对 C++ 也不是很好,我假设它使用它。您可以实现的一种方法是:

  • 将“g->getPlayer()->jump()”替换为“g->getPlayer()->setJumping()”。
  • 在角色上执行“setJumping()”来设置跳跃标志。
  • 在游戏循环中,调用“g->getPlayer()->updatePos()”
  • 在角色上实现“updatePos()”以更新角色的位置。在此,检查跳跃标志,如果为真,则根据您的跳跃算法更新位置。
于 2012-11-06T22:38:04.337 回答