我正在使用 libgdx 和 box2d,我想让我的玩家的 body 跳跃。当我尝试使用某些方法时,即使只是为了移动,也没有任何反应。
//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`
}
}
什么都没有发生,玩家的 body 一直下落,直到它撞到一个静止的物体上,每次我触摸屏幕时,它只打印出“touched”字符串。
更新
不确定这是否是它不起作用的原因,我有两个类,一个用于渲染,一个用于更新。在更新类上,我设置了 world.step() 而不是直接设置到我 body 所在的类。
//class for updating
public void update(float deltaTime){
physics.world.step(1 / 60f, 6, 2);
physics.jump(); //calling jump method from Physics class
}
对于渲染类也是一样,Box2dDebugRenderer
在我的 body 所在的地方是分开的
更新
我解决了这个问题,我的 Physics 类连接到 Update 和 Render 类引用了主类的 create 方法,我不明白,因为那是我为其他类的构造函数所做的。
public void create(){
physics = new Physics(); //object for the Physics constructor.
}
最佳答案
问题是您正在使用以米为单位的 box2d 比例尺 所以你创建的盒子是(20 米 x 20 米)所以“300”的力不足以将它向上移动 要使用 box2d,您需要转换您的值
将所有 box2d 值除以“WOLRD_TO_BOX”值标度
这篇文章可能有帮助
Libgdx Box2D pixel to meter conversion?
祝你好运
更新:
尝试改变
Gdx.input.justTouched()
到
Gdx.input.isTouched()
因为 JustTouched() 方法只被调用一次(不是以继续的方式)
关于java - Box2d 主体不响应输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33371726/