Viewport&相机设置

时间:2015-08-13 20:18:42

标签: android camera libgdx viewport orthographic

对于我在LibGDX和Android中的第一款游戏,我遇到了一个问题:

我的背景图片是2560px * 720px。屏幕是1280 * 720。 如何设置视口和相机以获得以下结果: 图片的高度相同,显示宽度为1280像素。

我尝试了很多东西,这让我很困惑。

Gamescreen.java

package com.joelbrun.jetskirider.screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.ui.Label;

public class Gamescreen implements Screen {


    public Texture jetski, wave, background;
    public SpriteBatch batch;
    public OrthographicCamera camera;
    public Label score;
    public static final int GAMESCREEN_WIDTH = 1920;
    public static final int GAMESCREEN_HEIGHT = 720;
    public static final int OBSTACLE_TYPES = 5;
    private Texture[] texture;

    @Override
    public void show() {
        texture = new Texture[OBSTACLE_TYPES];
        for (int i=0; i<OBSTACLE_TYPES; i++){
            texture[i] = new Texture(Gdx.files.internal("game/obstacles/obstacle" + Integer.toString(i+1)+".png"));
        }
        background = new Texture("game/background.png");
        jetski = new Texture("game/jetski.png");
        batch = new SpriteBatch();
        float aspectRatio = (float)Gdx.graphics.getWidth()/(float)Gdx.graphics.getHeight();
        camera = new OrthographicCamera();
        camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        //camera.position.set(GAMESCREEN_WIDTH / 2, GAMESCREEN_HEIGHT / 2, 0);


    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        camera.update();
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        batch.draw(background, 0, 0, 1280*2, 720);
        batch.end();
    }

    @Override
    public void resize(int width, int height) {
        //camera.position.set(GAMESCREEN_WIDTH / 2, GAMESCREEN_HEIGHT / 2, 0);
    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {
        batch.dispose();
        background.dispose();
        jetski.dispose();
        wave.dispose();
    }
}

2 个答案:

答案 0 :(得分:1)

你不能只在0,0画出图像吗?

private Texture backgroundTexture;
private SpriteBatch batch;
private OrthographicCamera camera;

@Override
public void show() {
  backgroundTexture = new Texture(Gdx.files.internal("backgroundIMage.png"));
  batch = new SpriteBatch();
  camera = new OrthographicCamera();
  camera.setToOrtho(false, Gdx.graphics.getWidth(), gGdx.graphics.getHeight());
}

@Override
public void render() {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    batch.draw(backgroundTexture, 0, 0);
    batch.end();
}

这不是一个完整的课程,但它应该让你知道该怎么做。要移动图像,您只需沿x轴移动它。

答案 1 :(得分:0)

所以我从用户VaTTeRGeR得到了Stackexchange的答案:

  

如果您在show()

中更改这些部分,它应该可以使用
viewport = new ScalingViewport(Scaling.fillY, GAMESCREEN_WIDTH, GAMESCREEN_HEIGHT, camera = new OrthographicCamera());
     

并添加调整大小方法:

@Override     public void resize(int width, int height) {         int SCREEN_WIDTH = width;       int SCREEN_HEIGHT = height;

  viewport.setWorldSize(GAMESCREEN_WIDTH, GAMESCREEN_HEIGHT);
  viewport.update(SCREEN_WIDTH, SCREEN_HEIGHT,true);  }
     

重要的是,将Sprites的高度设置为   GAMESCREEN_HEIGHT您可能需要移动camera a   但这不应该那么难。

private void moveView(Vector3 v) {        camera.translate(v);        camera.update();    }

非常感谢他

相关问题