Я сделал двигатель с LWJGL, и доволен им до сих пор. Естественно, теперь я готов добавить физику к движку, чтобы я мог начать создавать с ним игру. Я решил использовать Jbox2D, поскольку он выглядит довольно гибким, и я импортировал его в проект и выполнил всю необходимую настройку, однако после внедрения системы body в мой класс GameObject и запуска игры все GameObjects, казалось, направлялись в центр окно, я полагаю, что я, возможно, сделал несколько ошибок в коде:Я не уверен, как я могу использовать мой текущий движок lwjgl с Jbox2D
private BodyDef bodyDef = new BodyDef();
private Body box = world.createBody(bodyDef);
public float MOVE_SPEED = 7.0f;
public TAG tag;
public static int direction = 0;
public int jumpsRemaining;
public float xSpeed = MOVE_SPEED;
public float ySpeed = MOVE_SPEED;
public float x, y;
public float sX = 32, sY = 32;
public boolean jumpPressed, jumpWasPressed;
public boolean jumping = false;
public boolean falling = true;
//public int collidingX = 0;
//public int collidingY = 0;
public Time time = new Time();
protected static final int UP = 1;
protected static final int RIGHT = 2;
protected static final int DOWN = 3;
protected static final int LEFT = 4;
private boolean left = true;
private boolean right = true;
private boolean up = true;
private boolean down = true;
private Sprite spr;
public GameObject(float sX, float sY, float posX, float posY, BodyType type) {
this.sX = sX;
this.sY = sY;
this.x = posX;
this.y = posY;
initPhysics(type);
}
public GameObject(float posX, float posY, BodyType type) {
this.x = posX;
this.y = posY;
initPhysics(type);
}
public abstract void update();
public abstract void input();
private void initPhysics(BodyType type){
bodyDef.type = type;
bodyDef.position.set(x/30,y/30);
PolygonShape boxShape = new PolygonShape();
boxShape.setAsBox(sX/30/2, sY/30/2);
FixtureDef fixture = new FixtureDef();
fixture.density = 1;
fixture.shape = boxShape;
box.createFixture(fixture);
physicsBodies.add(box);
}
/**protected GameObject Colliding() {
for (GameObject gob : gameObjects) {
if (gob != this) {
if (Collision.checkCollision(gob, this) != null) {
return gob;
}
}
}
return null;
}**/
public void render() {
if (spr != null) {
glPushMatrix();
{
glTranslatef(box.getPosition().x * 30, box.getPosition().y * 30, 0);
spr.renderSprite();
}
glPopMatrix();
}
}
public void setTexture(String tex) {
spr = new Sprite(sX, sY, tex);
}
мир и HashSet тела находится в главном классе, если вам интересно, то я думаю, что я серьезно облажался код каким-то образом. Также я использую устаревший трубопровод lwjgl, поскольку он проще и лучше подходит для двигателя.
Вы считаете, что Box2D использует счетчики вместо пикселей? – Alberto
да вот почему я деляю или умножаю на 30 из которых является предполагаемым алгоритмом обмена, но я сомнительно .... – zipper9998
возможно, это тот факт, что box2D использует центр тела как его источник (именно поэтому я разделив размер на 2), а lwjgl использует другую точку ... – zipper9998