2013-08-22 2 views
0

im перемещение шара с корпусом коробки и при каждом столкновении/контакте im, увеличивающее линейную скорость в 1,1 раза. скорость увеличивается, но им не в состоянии ограничить скоростьпредельная линейная скорость тела android andengine box2d

код:

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

Из того, что я вижу, вы не уклоняете скорость вообще в своем коде. То, что находится внутри слушателя контакта, заключается в том, что оно увеличит скорость в 1,2 раза, когда скорость будет ниже 15,0, а затем коэффициент 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)); 
} 
Смежные вопросы