在角色上跳跃功能

Jump function on a character

本文关键字:功能 跳跃 角色      更新时间:2023-10-16

我正在创建这个2D游戏,而跳跃功能有问题。它起作用,角色上下跳跃,但我希望能够跳跃,然后在空中中移动角色,例如。因此它可以跳到平台上。我正在使用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;

这是我尝试过的方式之一。我还尝试在跳转外壳中制作一个开关功能以向左或向右导航,但我要么没有正确编码,要么只是无法使用。

我不熟悉SDLK,以及在实际游戏开发中如何实际完成。但是,我实施的一种方法是查看每个游戏刻度上是否都按下两个键。因此,如果按下w d,角色将同时向上抬起。但这在我看来是一个黑客解决方案。

在列出的实现情况下,看起来角色只有在地面上时才会向右移动。您需要更改代码,以便每个刻度,游戏检查角色是否跳跃,如果是的,则将角色移动到面向/跳跃的方向。此代码可能需要在活动处理程序之外生活。

理想情况下,您的键盘事件处理程序只需在字符上设置标志,表明它们正在跳跃和哪个方向,然后在游戏循环中您调用一个更新方法()方法,该方法实际上处理跳跃(并在字符时停止跳跃与世界几何形状相撞,例如地板或墙壁)。

希望这会有所帮助!

编辑:

没有看到您的其余代码,我不能说更多。我对C 也不是很好,我假设这使用了。您可以实施此方法的一种方法是:

  • 用" g-> getPlayer() -> setJumping()"。
  • 在字符上实现" setJumping()"以设置跳跃标志。
  • 在游戏循环中,致电" g-> getPlayer() -> updatePos()"
  • 在字符上实现" UpdatePos()"以更新角色的位置。在此中,检查跳跃标志,如果是真正的更新位置,请根据您的跳跃算法。