我使用libgdx和box2d,我想让我的玩家身体跳跃。当我尝试使用某些方法时,即使它只是用于移动,也没有任何反应。
//gravity Vector2
Vector2 Gravity = new Vector2(0,-9.8);
//Box2d World
World world = New World(gravity);
//then I created my player body
public void createPlayer(){
BodyDef def = new BodyDef();
def.type = BodyDef.BodyType.DynamicBody;
def.fixedRotation = true;
def.position.set(80, 200);
player = world.createBody(def);
PolygonShape shape = new PolygonShape();
shape.setAsBox(20, 20);
player.createFixture(shape, 1f);
shape.dispose();
}
//this is the jump method
public void jump(){
if(Gdx.input.justTouched() == true) {
player.applyForceToCenter(0, 900, false);
System.out.println("touched");//to make sure the touch is working`
}
}
没有任何事情发生,玩家的身体直到碰到一个静止的身体才会下降,每当我触摸屏幕时,它只会打印出“触摸”的状态。字符串。
更新
不确定这是否是它无法正常工作的原因,我有两个类用于渲染,一个用于更新。在更新类中,我设置了world.step(),而不是直接设置到我的身体所在的类。
//class for updating
public void update(float deltaTime){
physics.world.step(1 / 60f, 6, 2);
physics.jump(); //calling jump method from Physics class
}
对于渲染类,Box2dDebugRenderer
与我的身体
更新
我解决了这个问题,我连接到Update和Render类的Physics类引用了主类的create方法,我不明白,因为那是我为我其他课程的构造函数。
public void create(){
physics = new Physics(); //object for the Physics constructor.
}
答案 0 :(得分:1)
问题是您正在使用以米为单位的box2d比例 所以你的盒子你的创造是(20米x 20米),所以#34; 300"提升它是不够的 要使用box2d,您需要转换您的值
将所有box2d值除以" WOLRD_TO_BOX"价值尺度
这篇文章可能有用
Libgdx Box2D pixel to meter conversion?
祝你好运更新:
尝试更改
Gdx.input.justTouched()
到
Gdx.input.isTouched()
因为JustTouched()方法只调用一次(不是以连续方式)
答案 1 :(得分:1)
您的jump()
,World.step(...)
,debugRender.render(...)
函数应该采用render()
方法,而createPlayer()
on应该采用create()
方法
@Override
public void create() {
createPlayer()
}
@Override
public void render() {
//OpenGL settings
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
world.step(TIME_STEP, VELOCITY_ITERATIONS, POSITION_ITERATIONS);
jump();
debugRendrer.render(world, camera.combined);
}