Не могу заставить тестовый стенд JBox2d работать

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

Класс водителя

public class Driver {
public static final String GRAVITY_SETTING = "Gravity";
/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    TestbedModel model = new TestbedModel();         // create our model

    // add tests
    model.addCategory("My Tests");
    model.addTest(new MJWTest2());
    model.addTest(new VerticalStack());

    // add our custom setting "My Range Setting", with a default value of 10, between 0 and 20
    model.getSettings().addSetting(new TestbedSetting(GRAVITY_SETTING, SettingType.ENGINE, false));

    TestbedPanel panel = new TestPanelJ2D(model);    // create our testbed panel
    JFrame testbed = new TestbedFrame(model, panel, null); // put both into our testbed frame
    // etc
    testbed.setVisible(true);
    testbed.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

Тестовый класс

public class MJWTest2 extends TestbedTest {
    public static final String GRAVITY_SETTING = "Gravity";


    @Override
    public void initTest(boolean argDeserialized) {
        setTitle("Couple of Things Test");

        getWorld().setGravity(new Vec2());

        for (int i = 0; i < 2; i++) {
            PolygonShape polygonShape = new PolygonShape();
            polygonShape.setAsBox(1, 1);
            FixtureDef fix = new FixtureDef();
            fix.shape = polygonShape;

            BodyDef bodyDef = new BodyDef();
            bodyDef.type = BodyType.DYNAMIC;
            bodyDef.position.set(5 * i, 0);
            bodyDef.angle = (float) (Math.PI / 4 * i);
            bodyDef.allowSleep = false;
            Body body = getWorld().createBody(bodyDef);
            body.createFixture(fix);

            body.applyForce(new Vec2(-10000 * (i - 1), 0), new Vec2());
        }
    }
@Override
public void step(TestbedSettings settings) {
    super.step(settings); // make sure we update the engine!
    TestbedSetting gravity = settings.getSetting(GRAVITY_SETTING); // grab our setting
    if (gravity.enabled) {
      getWorld().setGravity(new Vec2(0, -9));
    }
    else {
      getWorld().setGravity(new Vec2());
    }
  }

    @Override
    public String getTestName() {
        return "Couple of Things";
    }
}

person NJGUY    schedule 25.03.2014    source источник


Ответы (2)


Было обновление движка без обновления вики. Упс! простите. Вам нужно создать контроллер и запустить его, как показано здесь: https://github.com/dmurph/jbox2d/blob/master/jbox2d-testbed/src/main/java/org/jbox2d/testbed/framework/j2d/TestbedMain.java

person Daniel Murphy    schedule 25.03.2014

Попробуй это

public class MJWTest2 extends TestbedTest {

   @Override
   public void initTest(boolean argDeserialized) {
      setTitle("Couple of Things Test");

      getWorld().setGravity(new Vec2());

      for (int i = 0; i < 2; i++)
      {
//         CircleShape circleShape = new CircleShape();
//         circleShape.m_radius = 1;
//         Shape shape = circleShape;
         PolygonShape polygonShape = new PolygonShape();
         polygonShape.setAsBox(1, 1);
         Shape shape = polygonShape;

         BodyDef bodyDef = new BodyDef();
         bodyDef.type = BodyType.DYNAMIC;
         bodyDef.position.set(5 * i, 0);
         bodyDef.angle = (float) (Math.PI / 4 * i);
         bodyDef.allowSleep = false;
         Body body = getWorld().createBody(bodyDef);
         body.createFixture(shape, 5.0f);

         body.applyForce(new Vec2(-10000 * (i - 1), 0), new Vec2());
      }
   }

   /**
    * @see org.jbox2d.testbed.framework.TestbedTest#getTestName()
    */
   @Override
   public String getTestName() {
      return "Couple of Things";
   }
}

И так называемый «класс водителей»

public class App2 {

public static final String GRAVITY_SETTING = "Gravity";

public static void main(String[] args) {
    // TODO Auto-generated method stub
    TestbedModel model = new TestbedModel();         // create our model

    // add tests
    model.addCategory("My Tests");
    model.addTest(new MJWTest2());
    model.addTest(new VerticalStack());

    // add our custom setting "My Range Setting", with a default value of 10, between 0 and 20
    model.getSettings().addSetting(new TestbedSetting(GRAVITY_SETTING, SettingType.ENGINE, false));

    TestbedPanel panel = new TestPanelJ2D(model);    // create our testbed panel
    JFrame testbed = new TestbedFrame(model, panel); // put both into our testbed frame
    // etc
    testbed.setVisible(true);
    testbed.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}

у меня сработало хорошо.. надеюсь, что и у вас сработает..

person YawningThunder    schedule 21.09.2016