LibGDX - перемещение Body & BodyDef через координаты, отправленные с сервера - PullRequest
0 голосов
/ 31 октября 2018

Мне было интересно, есть ли способ специально переместить объект / объект +5 по оси X, или, в частности, сказать X = 300, например, Y = 127.

Причина, по которой я спрашиваю, состоит в том, что я хочу, чтобы мой игровой сервер мог специально устанавливать / обновлять координаты игрока через сетевой пакет, но я не могу найти какие-либо методы, которые позволили бы мне специально обновлять координаты, как только они были создано и добавлено в мир.

Моя структура игрока / сущности:

Итак, на данный момент у меня, по сути, есть класс, который расширяет абстрактный класс с базовыми свойствами, который выглядит следующим образом.

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() {}

}

и у меня есть класс игрока, который имеет следующий метод:

private void handleInputUpdate() {
    float horizontalForce = 0f;
    float verticalForce = 0f;

    if (Gdx.input.isKeyPressed(Input.Keys.D)) horizontalForce += 1;
    if (Gdx.input.isKeyPressed(Input.Keys.A)) horizontalForce -= 1;
    if (Gdx.input.isKeyPressed(Input.Keys.W)) verticalForce += 1;
    if (Gdx.input.isKeyPressed(Input.Keys.S)) verticalForce -= 1;

    this.entityBody.setLinearVelocity((horizontalForce * 5), verticalForce * 5);
}

1 Ответ

0 голосов
/ 03 ноября 2018

Зависит от того, какую игру вы пытаетесь сделать, если вы хотите, чтобы в ней было быстрое движение, то вот как вы устанавливаете положение тела:

this.entireBody.setPosition(x, y);

Более реалистичный и плавный способ сделать это - приложить силы к телу как таковые:

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