Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 博弈跳跃逻辑_C++_Algorithm_Sdl - Fatal编程技术网

C++ 博弈跳跃逻辑

C++ 博弈跳跃逻辑,c++,algorithm,sdl,C++,Algorithm,Sdl,我正在制作一个2D马里奥游戏 以下功能用于在按下特定键时更新播放机的位置。玩家可以左右移动,在同一位置跳跃,或向左或向右跳跃(形成弧形) 这里有一个错误:当我到达关卡的末端(有一个固定的宽度)时,如果我试图向右移动并同时跳,玩家会跳起来并保持在空中。只有当我松开空格键时,玩家才会落地 如何解决这个问题?对于您的游戏,我认为您只希望玩家在按下空格和玩家在地板上时跳跃。然后,您必须检查球员是否在地板上,以获得所需的行为 我建议你安装一个这样的装置: if (this->keyPressed(S

我正在制作一个2D马里奥游戏

以下功能用于在按下特定键时更新播放机的位置。玩家可以左右移动,在同一位置跳跃,或向左或向右跳跃(形成弧形)

这里有一个错误:当我到达关卡的末端(有一个固定的宽度)时,如果我试图向右移动并同时跳,玩家会跳起来并保持在空中。只有当我松开空格键时,玩家才会落地


如何解决这个问题?

对于您的游戏,我认为您只希望玩家在按下空格和玩家在地板上时跳跃。然后,您必须检查球员是否在地板上,以获得所需的行为

我建议你安装一个这样的装置:

if (this->keyPressed(SDLK_SPACE) && this->isOnTheFloor()) {
                                 ^^^^^^^^^^^^^^^^^^^^^^^
   mov->jump();        // Changes the velocity in Y
}    

您的空格键处理程序应该只应用一次力-按键向下或向上(如果您愿意),而不是每帧。在空格键向下时,速度“向上”应设置为某个(可能为常量)值。然后每一帧,如果不是在地面上,速度下降应该以最大速度增加一个指定的量。因此
OnSpacebarDown,YVelocity=10.0和每帧

建议:如果不需要将
mov
持久化,只需在函数中定义它。
keyPressed(X)
返回
true
是按下的键X。
if (this->keyPressed(SDLK_SPACE) && this->isOnTheFloor()) {
                                 ^^^^^^^^^^^^^^^^^^^^^^^
   mov->jump();        // Changes the velocity in Y
}