LibGDX-通过服务器发送的坐标来移动Body&BodyDef

时间:2018-10-30 21:44:39

标签: java libgdx box2d game-development

我想知道是否有办法在X轴上专门移动实体/对象+5,或者具体说X = 300,Y = 127。

我问的原因是因为我希望我的游戏服务器能够通过网络数据包专门设置/更新玩家坐标,但是我找不到任何方法可以让我在已经更新坐标后专门更新坐标创建并添加到世界中。

我的播放器/实体结构:

因此,目前,我基本上有一个类,该类扩展了具有基本属性的Abstract类,如下所示。

compile

并且我有一个具有以下方法的播放器类:

public class VisibleEntity extends Entity {

    public String renderImage;
    public Body entityBody;
    public BodyDef bodyDef;


    public VisibleEntity(float height, float width, float positionX, float positionY, boolean isStatic, World world ) {
        this.height = height;
        this.width = width;
        this.positionX = positionX;
        this.positionY = positionY;
        this.isStatic = isStatic;
        this.world = world;
        this.entityBody = this.createNewVisibleEntity();
    }

    private Body createNewVisibleEntity() {
        PolygonShape shape = new PolygonShape();
        shape.setAsBox((this.width / 2) / Store.PIXELS_PER_METER, (this.height / 2) / Store.PIXELS_PER_METER);

        bodyDef = new BodyDef();
        bodyDef.type = this.isStatic ? BodyDef.BodyType.StaticBody : BodyDef.BodyType.DynamicBody;
        bodyDef.position.set(this.positionX / Store.PIXELS_PER_METER, this.positionY / Store.PIXELS_PER_METER);
        bodyDef.fixedRotation = true;

        entityBody = world.createBody(bodyDef);
        entityBody.createFixture(shape, 1f);

        shape.dispose();
        return entityBody;
    }

    @Override
    public void update() {}

    @Override
    public void render() {}

}

1 个答案:

答案 0 :(得分:0)

这取决于您要制作哪种游戏,如果您希望游戏动作敏捷,则可以通过以下方法设置身体的位置:

this.entireBody.setPosition(x, y);

更现实,更流畅的方法是这样对身体施加力量:

if (Gdx.input.isKeyPressed(Input.Keys.D)) this.entireBody.applyForce(new Vector2(5f, 0));