Я играю с box2d в CocosSharp. И у меня проблема: объекты двигаются слишком медленно! Несмотря на очень большие значения ...Слишком медленное движение, несмотря на огромную гравитацию в box2d
// Physics
public const float GRAVITY = -99999999999999999999999999999f;
public const int PTM = 32;
public const float ROCKET_MASS = 10000f;
public const float TIMESTEP = 1f/240f;
Обратите внимание, что я изменил timestep. Я пытался использовать массу, но это совершенно бессмысленно!
// Add rocket's physics
var def = new b2BodyDef();
def.allowSleep = true;
def.position = new b2Vec2(0.0f, 0.0f);
def.type = b2BodyType.b2_dynamicBody;
body = world.CreateBody (def);
// body.Mass = Globals.ROCKET_MASS;
body.SetActive(true);
b2PolygonShape bodyBox = new b2PolygonShape();
bodyBox.SetAsBox(0.1f , 0.5f); // !
b2FixtureDef bodyFixture = new b2FixtureDef();
bodyFixture.shape = bodyBox;
bodyFixture.density = 0.5f;
bodyFixture.friction = 0.4f;
body.CreateFixture(bodyFixture);
Вот как я инициализировать физику:
void InitPhysics()
{
// Init the world
var gravity = new b2Vec2 (0.0f, Globals.GRAVITY);
world = new b2World (gravity);
world.SetAllowSleeping (true);
world.SetContinuousPhysics (true);
// Now init the ground
new Ground(world);
}
И это мой Renderer код:
private void StartScheduling()
{
Schedule(t =>
{
if(t <= Globals.TIMESTEP)
timeAccumulator += t;
else
timeAccumulator += Globals.TIMESTEP;
while (timeAccumulator >= Globals.TIMESTEP)
{
world.Step(Globals.TIMESTEP, 6, 2);
timeAccumulator -= Globals.TIMESTEP;
// If touched, then do apply force
if (touch)
{
rocket.body.ApplyLinearImpulse(new b2Vec2(0f, 10000f), b2Vec2.Zero);
}
world.DrawDebugData();
rocket.UpdateRocketPosition();
}
world.ClearForces();
});
}
Я так устала с этим, пожалуйста, помогите! Ракета должна падать быстро, но это не так!
http://www.iforce2d.net/b2dtut/gotchas#speedlimit – iforce2d
@ iforce2d как я могу уменьшить размер объекта в Box2D мире, но сохранение его видимый размер (я имею 480x800 экран)? –
Используйте другое значение для PTM – iforce2d