游戏角色在不同的屏幕尺寸,libGDX中移动不同的速度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏角色在不同的屏幕尺寸,libGDX中移动不同的速度相关的知识,希望对你有一定的参考价值。

我正在尝试用libGDX制作游戏,其中游戏角色会横向移动屏幕。我用以下代码制作了一个样本,并在手机(较小的宽度)和平板电脑(较大的宽度)上进行了测试。演员在手机中移动和消失的速度比平板电脑快。我怎样才能解决这个问题?

public class SpriteMoveTestGame extends Game {

private MyScreen screen;

@Override
public void create() {
    screen = new MyScreen();
    setScreen(screen);
}

@Override
public void dispose() {
}

private class MyActor extends Actor {

    private Texture texture;
    private float x;

    public MyActor() {
        texture = new Texture(Gdx.files.internal("badlogic.jpg"));
        x = 0.0f;
    }

    @Override
    public void act(float delta) {
        super.act(delta);
    }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        super.draw(batch, parentAlpha);
        Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);
        Gdx.gl20.glClearColor(0, 1, 0, 0);
        batch.draw(texture, x, 200);
        x += 4.5f;
    }
}

private class MyScreen extends ScreenAdapter {

    private Stage stage;
    private FitViewport fitViewport;
    private MyActor actor;

    public MyScreen() {
        stage = new Stage();
        actor = new MyActor();
        stage.addActor(actor);
    }

    @Override
    public void render(float delta) {
        super.render(delta);
        stage.act();
        stage.draw();
    }
}

}

答案

正如奥斯卡所说,你不使用任何相机或视口,所以你使用屏幕分辨率。如果手机的宽度是800而且桌子的宽度是1200而且每一帧你做actor.x += 20,那么演员在手机上有40帧,平板电脑上有60帧穿过孔宽。

要使用Fitviewport初始化舞台:

private OrthographicCamera camera;
private FitViewport viewport;
private Stage stage;

@Override
public void show() {
    camera = new OrthographicCamera();
    viewport = new FitViewport(200, 200, camera);
    stage = new Stage(viewport);
}

@Override
public void resize(int width, int height) {
    stage.getViewport().update(width, height);
}

现在你有一个具有200 x 200单位视口的舞台。当你现在运行应用程序时,演员将在左侧到高速侧的两个设备,手机和平板电脑上拥有10帧。

最后一个问题是,你可能有一个非常旧的手机,它有点慢。您的旧手机一帧需要0.02秒,而平板电脑仅需要0.016秒的帧。 所以平板电脑上的演员比手机上的演员要快一点。

你想:“我的演员可以在1秒内完成20个单位。”所以首先你做:actor.x += 20;

但问题是,演员现在在一帧中运行20个单位而不是一秒钟。 要解决这个问题,你需要在这个和最后一帧之间乘以20增量时间:actor.x += 20 * delta;deltaact(float delta)方法中):

@Override
public void act(float delta) {
    x += 20 * delta;
}

现在你的演员总是在1秒内运行20个单位,在每个设备上你会看到200个单位宽度的世界。因此,在每个设备上,演员从左到右都有10秒。

以上是关于游戏角色在不同的屏幕尺寸,libGDX中移动不同的速度的主要内容,如果未能解决你的问题,请参考以下文章

开源java游戏框架libgdx专题-10-核心库-Viewport

统一不同屏幕尺寸下的不同物理行为

如何让你的小游戏适配不同尺寸的手机屏幕

java 和 libGDX / LWJGL 游戏全屏尺寸错误,适用于 Ubuntu 上的多个显示器

Libgdx 渲染方法

不能为不同的屏幕尺寸居中和弯曲分组元素