java - Box2d 主体不响应输入

标签 java libgdx box2d gravity

我正在使用 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/

相关文章:

ios - 如何防止物理体改变 Sprite Kit 中的 x 位置

java - 比较两个 json 结构并得到不匹配的变化

java - 如何实现枚举类型的某些方法

java - 发现多个文件具有独立于操作系统的路径 'lib/arm64-v8a/librealm-jni.so'

libgdx - 在 libgdx 中玩游戏时如何唤醒屏幕?

c++ - 仅在发布版本中出错,从 std::vector 复制结构

java - 一个简单计算器代码的问题(Java)

java - libgdx scene2d 添加多表

java - 如何使用 libgdx scene2d 创建多页屏幕?

java - setAngularVelocity 旋转非常慢