我用一个盒体移动一个球,并在每次碰撞/接触时将线性速度提高1.1倍。速度增加但我无法限制速度
代码:
public static final FixtureDef _BALL_FIXTURE_DEF=PhysicsFactory.createFixtureDef(0, 1.0f, 0.0f, false, _CATEGORYBIT_BALL, _MASKBITS_BALL, (short)0);
_ballCoreBody = PhysicsFactory.createCircleBody(_physicsWorld, _ballCore, BodyType.DynamicBody, _BALL_FIXTURE_DEF);
_ballCoreBody.setAngularDamping(0);
_ballCoreBody.setLinearDamping(0);
_ballCoreBody.setActive(true);
_ballCoreBody.setBullet(true);
_ballCoreBody.setGravityScale(0);
this._scene.attachChild(_ballCore);
this._physicsWorld.registerPhysicsConnector(new PhysicsConnector(_ballCore, _ballCoreBody));
在contactListener中
if(x1.getBody().getLinearVelocity().x<15.0f && x1.getBody().getLinearVelocity().y<15.0f)
x1.getBody().setLinearVelocity(new Vector2(x1.getBody().getLinearVelocity().x*1.2f, x1.getBody().getLinearVelocity().y*1.2f));
else
x1.getBody().setLinearVelocity(new Vector2(x1.getBody().getLinearVelocity().x/1.1f, x1.getBody().getLinearVelocity().y/1.1f));
我如何实现这一目标?
答案 0 :(得分:0)
从我所看到的,你并没有在代码中限制速度。触点监听器内部的内容是,当速度低于15.0时,速度增加1.2倍,之后增加1.1倍,因此每次碰撞时速度都会不断加快。这可能更合适,给它一个去(没有测试代码,所以可能需要调整):
float xVel = x1.getBody().getLinearVelocity().x;
float yVel = x1.getBody().getLinearVelocity().y;
//if you want to be sure the speed is capped in all directions evenly you need to find
//the speed in the direction and then cap it.
bool isBelowMaxVel = ( xVel * xVel + yVel, * yVel ) < 225.0f; //15 * 15 = 225 // this is to avoid using a square root
if( isBelowMaxVel ) // only increase speed if max not reached
{
x1.getBody().setLinearVelocity(new Vector2( xVel * 1.1f, yVel * 1.1f ));
}