简体   繁体   English

限制机器人和引擎box2d的线速度

[英]limit linear velocity of body android andengine box2d

im moving a ball with a box body and at each collision/contact im increasing the linearvelocity by factor 1.1. im使用盒子主体移动球,并且在每次碰撞/接触时im将线速度提高1.1倍。 the velocity increases but im not able to limit the velocity 速度增加,但无法限制速度

code: 码:

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));

inside contactListener 内部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));

how do i achieve this? 我该如何实现?

From what I can see you are not capping the velocity at all in your code. 据我所知,您根本没有在代码中限制速度。 What is inside the contact listener is that it will increase the speed by factor 1.2 when the velocity is below 15.0 and by factor 1.1 there after, so it will constantly speed up with every collision. 接触侦听器内部的功能是,当速度低于15.0时,它将以1.2的速度增加速度,此后再增加1.1的速度,因此每次碰撞时它将不断加速。 This might be more suitable, give it a go (not tested the code through, so might need adjusting): 这可能更合适,可以尝试一下(未测试代码,因此可能需要调整):

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 ));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM