C++ 二维跳跃误差

C++ 二维跳跃误差,c++,collision-detection,box2d,C++,Collision Detection,Box2d,基本上,我的代码如下: bool Player::onCollision(BaseOBJ* obj) { if(obj->name == "phys_static") { jumping = true; } return true; } void Player::jump() { if(jumping == true) { ApplyForce(Vec2(0.f, -13000.f), Vec2(0.f, 0.f

基本上,我的代码如下:

bool Player::onCollision(BaseOBJ* obj)
{
    if(obj->name == "phys_static")
    {
        jumping = true;
    }
    return true;
}

void Player::jump() { if(jumping == true) { ApplyForce(Vec2(0.f, -13000.f), Vec2(0.f, 0.f)); jumping = false; } }

bool播放器::迎面碰撞(BaseOBJ*obj)
{
如果(对象->名称==“物理静态”)
{
跳跃=正确;
}
返回true;
}

void Player::jump() { 如果(跳跃==真) { 应用力(Vec2(0.f,-13000.f),Vec2(0.f,0.f)); 跳跃=错误; } }

当发生碰撞时,首先调用迎面碰撞。如果没有任何新的碰撞,则不会调用它(例如,只会记录跳跃,不会从一侧移动到另一侧)


它通常工作正常,但是如果我在跳跃过程中一直按住跳跃键(从启动到接触地面),我就无法再次跳跃。有什么解决方案吗?

一个常被忽视的问题是,按住一个键,操作系统会将其转换为快速、重复的按键

例如: 在文本编辑器中,按住A键。将出现一个“a”,然后在稍微延迟后: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

您的跳转函数是否被反复调用,并以某种方式破坏了跳转检查的工作方式

如果没有,请回答前面的评论者提出的一些问题


附言:在我看来,“跳跃”应该被命名为“canJump”或“allowJumping”。这避免了很多混乱。现在它听起来像是指示你是否在跳跃,而实际上你用它来指示你是否能跳跃。

Player::onCollision总是返回true,是吗?处理键盘事件的代码可能会更有趣。否则,我可能会在jump中放入一些调试输出,以查看是否调用了该函数以及jumping标志的值。此代码提出的问题比回答的问题多。事件的正常过程是什么?在按下跳转键之前,“跳转”是正确的还是错误的?按下跳转键是否调用
jump()
?是在跳转开始时调用的
onCollision
,还是在跳转结束时调用的,还是两者都调用的?。。。