libgdx和Box2d在相机移动而机身未移动时同步机身位置

libgdx和Box2d在相机移动而机身未移动时同步机身位置,libgdx,box2d,Libgdx,Box2d,好了,伙计们,我知道这是一个很容易回答的问题,我知道这只是一个概念或一行代码要解决,我只是似乎无法找出这两个对象之间的相关性 我有一个身体和一个精灵,它们完美地排列在一起,当相机不移动时,它们完美地一起移动,但我想以恒定的速度移动相机,当我这样做时,精灵和身体似乎彼此分离 当我移动身体时,很明显,位置会更新,因此精灵的位置也会更新。但是,当相机移动,而身体没有移动时(它正在慢慢地离开屏幕),身体的位置不会更新,所以即使身体向后移动,精灵也会静止不动(从技术上讲,我知道身体根本没有移动,是相机在向

好了,伙计们,我知道这是一个很容易回答的问题,我知道这只是一个概念或一行代码要解决,我只是似乎无法找出这两个对象之间的相关性

我有一个身体和一个精灵,它们完美地排列在一起,当相机不移动时,它们完美地一起移动,但我想以恒定的速度移动相机,当我这样做时,精灵和身体似乎彼此分离

当我移动身体时,很明显,位置会更新,因此精灵的位置也会更新。但是,当相机移动,而身体没有移动时(它正在慢慢地离开屏幕),身体的位置不会更新,所以即使身体向后移动,精灵也会静止不动(从技术上讲,我知道身体根本没有移动,是相机在向前移动,我完全理解这一点)

我的问题是,当身体真正静止时,有什么属性/功能通知身体它实际上在移动,而只是相机在移动

这里有一些代码,以备您需要

public void render(float delta) {       
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    tiledMapRenderer.setView(camera);
    tiledMapRenderer.render();
    renderer.render(world,camera.combined); //DebugRenderer

    Array<Body> bodies = new Array<Body>(world.getBodyCount());
    world.getBodies(bodies);

    sb.begin(); //SpriteBatch
    for (Body body : bodies) {
        update(body);
    }
    sb.end();

    camera.position.x += .01f;
    camera.update();

    // Fixed timestep
    accumulator += delta;

    while (accumulator >= delta) {
        world.step(TIME_STEP, 6, 2);
        accumulator -= TIME_STEP;
    }       



}

  private void update(Body body) {


        CharacterUserData cud = (CharacterUserData)body.getUserData();
        cud.getSprite().setPosition((body.getPosition().x / Constants.WORLD_TO_BOX),(body.getPosition().y / Constants.WORLD_TO_BOX));
        cud.getSprite().setRotation(body.getAngle() * MathUtils.radiansToDegrees);
        cud.getSprite().draw(sb);
    }
public void渲染(浮点增量){
glClearColor(1,0,0,1);
GL20.gl.glBlendFunc(GL20.gl_SRC_ALPHA,GL20.gl_ONE_减去SRC_ALPHA);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
tiledMapRenderer.setView(摄像机);
tiledMapRenderer.render();
renderer.render(world,camera.combined);//DebugRenderer
数组体=新数组(world.getBodyCount());
世界卫生组织(机构);
sb.begin();//SpriteBatch
用于(主体:主体){
更新(正文);
}
(某人结束);
摄像机位置x+=0.01f;
camera.update();
//固定时间步长
累加器+=增量;
while(累加器>=增量){
世界步(时间步,6,2);
累加器-=时间步长;
}       
}
私有无效更新(正文){
CharacterUserData cud=(CharacterUserData)body.getUserData();
cud.getSprite().setPosition((body.getPosition().x/Constants.WORLD_TO_BOX),(body.getPosition().y/Constants.WORLD_TO_BOX));
cud.getSprite().setRotation(body.getAngle()*MathUtils.radiansToDegrees);
绘制(某人);
}
我用谷歌搜索了一下,似乎找不到让我点击的合适位置。非常感谢你们提供的任何帮助


谢谢-

您是否尝试过设置body使其无法睡眠?body.setSleepingAllowed(false);我做了,但没有什么不同……到目前为止,唯一让我进步的是根据相机的位置更新精灵的位置,但我还没有完善它。我可以通过做数学让它像我想的那样工作,但这似乎不是最好的方法……这就是我改变更新的样子(只有sprite.cud.getSprite().setposition((body.getPosition().x/Constants.WORLD_TO_框)-cud.getSprite().getWidth()/2)-(camera.position.x/Constants.WORLD_TO_框)-240),(body.getPosition().y/Constants.WORLD_TO_框)-cud.getSprite().getHeight()/2);