LibGDX를 사용하여 Box2D에서 자동 회전을 적용하는 방법은 무엇입니까? 이것은 현실적으로 보이지 않습니다 (그림 참조). 현실 세계에서 LibGDX + Box2D 로테이션
는 블록 회전 넘어하지만이 시뮬레이션에서하지 않는 것입니다. 메인 게임 클래스PolygonShape pShape = new PolygonShape();
FixtureDef fDef = new FixtureDef();
BodyDef bDef = new BodyDef();
Body body;
pShape.setAsBox(width, height);
bDef.position.set(x, y);
bDef.type = type;
fDef.shape = pShape;
fDef.density = 1.0f;
fDef.friction = 0.3f;
body = world.createBody(bDef);
body.createFixture(fDef);
body.setUserData(this);
MassData md = new MassData();
md.mass = 5;
body.setMassData(md);
코드 :
세계는 -9.81에서 Y 중력을 (너무 떨어지고 좋은 작품 충돌) 나는 상자를 생성하는 곳의 코드가
public class Game implements ApplicationListener {
public static int WIDTH;
public static int HEIGHT;
World world;
Box2DDebugRenderer dr;
OrthographicCamera cam;
float time;
final float P = 1/60f;
final static int C = 100;
public void create() {
Gdx.gl.glClearColor(.1f, .1f, .1f, 1.0f);
WIDTH = Gdx.graphics.getWidth();
HEIGHT = Gdx.graphics.getHeight();
world = new World(new Vector2(0, -9.8f), false);
dr = new Box2DDebugRenderer();
cam = new OrthographicCamera();
cam.setToOrtho(false, WIDTH/C, HEIGHT/C);
new Block(world, BodyType.StaticBody, 2, HEIGHT, 0, HEIGHT);
new Block(world, BodyType.StaticBody, 2, HEIGHT, WIDTH-40, HEIGHT);
new Block(world, BodyType.StaticBody, WIDTH, 2, WIDTH, HEIGHT);
new Block(world, BodyType.StaticBody, WIDTH, 2, WIDTH, 0);
}
public void render() {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
input();
dr.render(world, cam.combined);
time += Gdx.graphics.getDeltaTime();
while(time >= P) {
update();
time -= P;
}
}
public void update() {
world.step(P, 5, 5);
}
public void input() {
if(Gdx.input.isTouched()) {
new Block(world, BodyType.DynamicBody, 50, 20, Gdx.input.getX(), HEIGHT-Gdx.input.getY());
}
}
public void dispose() { }
public void pause() { }
public void resize(int arg0, int arg1) { }
public void resume() { }
}
블록 클래스
코드 :
public class Block {
public Block(World world, BodyType type, float width, float height, float x, float y) {
PolygonShape pShape = new PolygonShape();
FixtureDef fDef = new FixtureDef();
BodyDef bDef = new BodyDef();
Body body;
pShape.setAsBox(width/Game.C, height/Game.C);
bDef.position.set(x/Game.C, y/Game.C);
bDef.type = type;
fDef.shape = pShape;
fDef.density = 1.0f;
fDef.friction = 0.3f;
body = world.createBody(bDef);
body.createFixture(fDef);
body.setUserData(this);
body.setFixedRotation(false);
MassData md = new MassData();
md.mass = 5;
body.setMassData(md);
}
}
몸에 질량이 있습니까? –
나는 그들의 가치를 인쇄했고 그들은 1kg의 질량을 가지고있다. – ViliX64
중력을 설정 했습니까? 시체의 회전도 잠글 수 있습니다. 아마도 그렇게했을까요? – noone