视口/相机/渲染中的Libgdx问题

时间:2016-01-08 10:51:26

标签: java android libgdx

我在过去两天遇到麻烦,弄清楚我的申请有什么问题。我试图建立一个游戏,一个玩家需要上升的平台游戏,(有点像doodlejump)。我用tmx格式构建了testmap。我一直试图启动相机和视口来显示世界的左下角,因此玩家可以向右移动也向上移动。但对于一个开始的libgdx学习者来说这似乎很难!

我正在使用Playscreen,HUD和MainActivity:

播放屏幕

private MainActivity game;
private OrthographicCamera gamecam;
private Viewport gameport;
private HUD hud;

private TmxMapLoader mapLoader;
private TiledMap map;
private OrthogonalTiledMapRenderer renderer;

private World world;
private Box2DDebugRenderer b2dr;

private Jack player;



public PlayScreen(MainActivity game){

    // Initiates the game, camera, viewport and HUD
    this.game = game;
    gamecam = new OrthographicCamera();
    hud = new HUD(game.batch);

    gameport = new FitViewport(MainActivity.V_WIDTH, MainActivity.V_HEIGHT, gamecam);

    // loading the map
    mapLoader = new TmxMapLoader();
    map = mapLoader.load("level1revised.tmx");
    renderer = new OrthogonalTiledMapRenderer(map, 1 / MainActivity.PPM);

    //initially set our gamecam to be centered correctly at the start of of map
    gamecam.position.set(gameport.getWorldWidth() / 2, gameport.getWorldHeight() / 2, 0);

    // Box2D world (graphics)
    world = new World(new Vector2(0, -10), true);
    b2dr = new Box2DDebugRenderer();

    // New Jack
    player = new Jack(world);


    BodyDef bdef = new BodyDef();
    PolygonShape shape = new PolygonShape();
    FixtureDef fdef = new FixtureDef();
    Body body;


    // The ground as an object is defined
    for(MapObject object: map.getLayers().get(2).getObjects().getByType(RectangleMapObject.class)){
        Rectangle rect = ((RectangleMapObject) object).getRectangle();

        bdef.type = BodyDef.BodyType.StaticBody;
        bdef.position.set((rect.getX() + rect.getWidth()/2)/MainActivity.PPM, (rect.getY() + rect.getHeight()/2) /MainActivity.PPM);

        body = world.createBody(bdef);

        shape.setAsBox(rect.getWidth()/2, rect.getHeight()/2);
        fdef.shape = shape;
        body.createFixture(fdef);
    }
    public void update(float dt){
    handleInput(dt);

    world.step(1 / 60f, 6, 2);

    //gamecam.position.x = player.b2body.getPosition().x;

    gamecam.update();
    renderer.setView(gamecam);

}

@Override
public void render(float delta) {
    update(delta);

    // Clear the screen
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    // render the map
    renderer.render();

    // render the box2d
    b2dr.render(world, gamecam.combined);



    game.batch.setProjectionMatrix(hud.stage.getCamera().combined);
    hud.stage.draw();


}

@Override
public void resize(int width, int height) {
        gamecam.viewportWidth = width;
        gamecam.viewportHeight = height;
}

HUD& Mainactivity

 public HUD(SpriteBatch sb){
        worldTimer = 300;
        timeCount = 0;
        score = 0;

        viewport = new FitViewport(MainActivity.V_WIDTH, MainActivity.V_HEIGHT, new OrthographicCamera());
        stage = new Stage(viewport, sb);

        Table table = new Table();
        table.top();
        table.setFillParent(true);

        countdownlabel = new Label(String.format("%03d", worldTimer), new Label.LabelStyle(new BitmapFont(), Color.RED));
        scoreLabel = new Label(String.format("%06d", score), new Label.LabelStyle(new BitmapFont(), Color.RED));
        timeLabel = new Label("TIME", new Label.LabelStyle(new BitmapFont(), Color.RED));
        levelLabel = new Label("level 1", new Label.LabelStyle(new BitmapFont(), Color.RED));

        table.add(timeLabel).expandX().padTop(10);
        table.add(levelLabel).expandX().padTop(10);
        table.row();
        table.add(scoreLabel).expandX().padTop(10);

        stage.addActor(table);
    }

public class MainActivity extends Game {
public SpriteBatch batch;

    public static final int V_WIDTH = 720;
    public static final int V_HEIGHT = 480;
    public static final float PPM = 1;

    public static final String TITLE = "Jack the Pirate";

    @Override
    public void create () {
        batch = new SpriteBatch();
        setScreen(new PlayScreen(this));
    }

    @Override
    public void render () {
        super.render();

    }
}

我不知道在哪里看,无数次通过基础:(我的tmx瓷砖地图是14个瓷砖宽,70个瓷砖高。瓷砖本身是16x16。我的测试设备是三星Galaxy S3,我想在肖像模式下使用它。

任何想法在哪里看?在此先感谢您的帮助!

0 个答案:

没有答案