Box2D角色移动时无法下落问题技术求助
问题分析与解决
你的问题出在移动代码逻辑里:当按下左右键时,你直接将刚体的线性速度设置为b2Vec2(5, 0)或b2Vec2(-5, 0),这会把y轴速度强制设为0,覆盖了Box2D重力作用下的下落速度,导致角色无法继续下落。
修正后的代码
你需要保留当前的y轴速度,只修改x轴的速度:
// 获取当前刚体的线性速度 b2Vec2 currentVelocity = p_pBody.body->GetLinearVelocity(); if (right == true) { // 仅修改x轴速度,保留重力带来的y轴速度 p_pBody.body->SetLinearVelocity(b2Vec2(5, currentVelocity.y)); } else if (left == true) { p_pBody.body->SetLinearVelocity(b2Vec2(-5, currentVelocity.y)); } else { // 无移动输入时,可保留y轴速度,x轴减速至0 p_pBody.body->SetLinearVelocity(b2Vec2(0, currentVelocity.y)); } // 图形位置应从Box2D刚体位置同步,避免物理与视觉脱节 b2Vec2 bodyPos = p_pBody.body->GetPosition(); p_pBody.rect.setPosition(bodyPos.x * s_METPX, bodyPos.y * s_METPX);
额外提示:不要直接用p_xPos/p_yPos设置图形位置,应该从Box2D刚体的实时位置同步,否则容易出现物理状态和视觉显示不一致的问题。
内容的提问来源于stack exchange,提问作者Bagbaq
相关产品推荐
相关产品推荐

