对角色的跳跃功能

时间:2012-11-06 22:09:21

标签: c++ sdl

我正在创建这个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;

这是我尝试过的方法之一。我也尝试在跳跃盒内部进行切换功能以向左或向右导航,但我要么没有正确编码,要么就是没有工作。

2 个答案:

答案 0 :(得分:0)

我不熟悉SDLK以及在实际游戏开发中如何实现这一点。 然而,我实现这一点的一种方法是查看每个游戏勾号是否按下了两个键。因此,如果按下w + d,则角色会同时向上和向右移动。但在我看来,这是一个黑客的解决方案。

答案 1 :(得分:0)

通过列出的实现,看起来角色只有在地面上才会向右移动。您需要更改代码以便每次打勾,游戏都会检查角色是否在跳跃,如果是,则按照角色面向/跳跃的方向移动角色。此代码可能需要存在于事件处理程序之外。

理想情况下,你的键盘事件处理程序只会在字符上设置一个标志,指示它们正在跳跃和向哪个方向移动,然后在你的游戏循环中调用一个实际处理跳跃的update()方法(并在字符时停止跳转)与世界几何体碰撞,如地板或墙壁。)

希望这有帮助!

修改

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

  • 将“g-> getPlayer() - > jump()”替换为“g-> getPlayer() - > setJumping()”。
  • 在角色上实施“setJumping()”以设置跳跃旗帜。
  • 在游戏循环中,调用“g-> getPlayer() - > updatePos()”
  • 在角色上实施“updatePos()”以更新角色的位置。在这里,检查跳跃标志,如果它是真的根据您的跳跃算法更新位置。