2015-02-17 2 views
0

Возникла проблема с box2d. Я хотел добавить к уже существующей игровой физике, но столкнулся с проблемами. Во-первых, мир игры я рисую с расчетомГравитация и неправильный размер

public Hero(float x, float y, int width, int height) { 
    this.width = width; 
    this.height = height; 

    position = new Vector2(x, y); 
    velocity = new Vector2(0, 0); 
    acceleration = new Vector2(0, -420); 
} 

public void update(float delta){ 
    velocity.mulAdd(acceleration, delta); 

    if(velocity.y < -200){ 
     velocity.y = -200; 
    } 

    position.mulAdd(velocity,delta); 
} 

public void onTap(){ 
    velocity.y = 140; 
} 

тело героя падает от стандартной установки, но тело коробки, что я добавил к испытанию ведет себя очень странно.

Номер вопроса 1. Почему box2d поле больше, чем герой с этой настройкой, но когда я делю на два, он становится похожим на размер текстуры героя? Может быть связано с такими эффектами, чтобы тело было нарисовано на основе центра во всех направлениях. 2. Почему тело в мире с силой тяжести -420 непрерывно падает с одинаковой скоростью, но не так сильно, как мой герой. Как добиться подобного эффекта?

hero = new Hero(30, midPointY, 18, 21); 
    hero1 = new Box2Dhero(world, 90, midPointY, 18, 21); 

Его Box2D герой конструктор

public Box2Dhero(World world, float x, float y, int width, int height) { 

    bodyDef = new BodyDef(); 
    bodyDef.position.set(x,y); 
    bodyDef.type = BodyDef.BodyType.DynamicBody; 
    body = world.createBody(bodyDef); 

    box = new PolygonShape(); 
    box.setAsBox(width,height); 
    fixtureDef = new FixtureDef(); 
    fixtureDef.shape = box; 
    body.createFixture(fixtureDef); 
} 

Мой размер GameWorld

float screenWidth = Gdx.graphics.getWidth(); 
float screenHeight = Gdx.graphics.getHeight(); 
float gameHeight = 385; 
float gameWidth = screenWidth/(screenHeight/gameHeight); 
+0

Рассмотрите возможность присвоения имен вашим подразделениям. Ускорение или гравитация 420 выглядит так, будто вы используете неправильные единицы. 420 что? – Xoppa

ответ

0
  1. Ваше замечание о поле, основываясь на центре единичной длины во всех направлениях является правильным.

    Это должно повлиять на ваше сравнение в том смысле, что исходные коды box2d и box не совпадают. Этот эффект должен быть относительно небольшим.

    • Вы зажимаете свою скорость в направлении y до -200. Такое предположение не может быть хорошей идеей для сравнения. Поиск ресурса относительно того, что делает box2d, будет хорошей идеей (возможно, источник).
    • Большинство физических двигателей выполняют равномерное временное шага, чтобы быть deterministic. Box2D является одним из них. Вы можете прочитать о равномерном шаге времени here.

Там может быть много больше различий/оптимизаций, глядя в источник и сравнение будет наиболее эффективным решением для вас, на мой взгляд.

Удачи.

Смежные вопросы