Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使.tmx映射填充整个屏幕_Java_Android_Libgdx_Tiled - Fatal编程技术网

Java 如何使.tmx映射填充整个屏幕

Java 如何使.tmx映射填充整个屏幕,java,android,libgdx,tiled,Java,Android,Libgdx,Tiled,我正在使用Libgdx加载一个.tmx映射,而映射并没有填满整个屏幕。我无法解决这个问题,所以作为最后的手段,我在这里问一个问题。我在YouTube上关注一个教程,他没有涵盖这个问题,因此我无法继续。我尝试了很多事情,但都没有成功。地图的宽度为240块,高度为13块,16乘16 ,, 这是代码。我认为这个问题与 renderer = new OrthogonalTiledMapRenderer(map, 1/DBZ.PPM), gameCam.position.set(gamePort.get

我正在使用Libgdx加载一个.tmx映射,而映射并没有填满整个屏幕。我无法解决这个问题,所以作为最后的手段,我在这里问一个问题。我在YouTube上关注一个教程,他没有涵盖这个问题,因此我无法继续。我尝试了很多事情,但都没有成功。地图的宽度为240块,高度为13块,16乘16

,,

这是代码。我认为这个问题与

renderer = new OrthogonalTiledMapRenderer(map, 1/DBZ.PPM),
gameCam.position.set(gamePort.getWorldWidth()/2, 
gamePort.getWorldHeight()/2, 0);,
gameCam = new OrthographicCamera(); 
gamePort = new FitViewport(DBZ.V_WIDTH/DBZ.PPM, DBZ.V_HEIGHT/DBZ.PPM, gameCam);

    public class PlayScreen implements Screen {
    private  DBZ 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 Goku player;
    private TextureAtlas atlas;


    public PlayScreen(DBZ game){
        atlas = new TextureAtlas("goku.pack");
        this.game=  game;
        gameCam = new OrthographicCamera();
        gamePort = new FitViewport(DBZ.V_WIDTH/DBZ.PPM, DBZ.V_HEIGHT/DBZ.PPM, gameCam);
        hud = new Hud(game.batch);
        maploader= new TmxMapLoader();
        map = maploader.load("level1.tmx");
        renderer = new OrthogonalTiledMapRenderer(map, 1/DBZ.PPM);
        gameCam.position.set(gamePort.getWorldWidth()/2, gamePort.getWorldHeight()/2, 0);
        world = new World(new Vector2(0,-10),true);
        b2dr = new Box2DDebugRenderer();
        new B2WorldCreator(world,map);
        player = new Goku(world, this);
    }

    public TextureAtlas getAtlas(){
        return atlas;
    }

    @Override
    public void show() {

    }

    public void handleInput(float dt){
        if (Gdx.input.isKeyJustPressed(Input.Keys.UP))
            player.b2body.applyLinearImpulse(new Vector2(0, 4f), player.b2body.getWorldCenter(), true);
        if (Gdx.input.isKeyPressed(Input.Keys.RIGHT) && player.b2body.getLinearVelocity().x <= 2)
            player.b2body.applyLinearImpulse(new Vector2(0.1f, 0), player.b2body.getWorldCenter(), true);
        if (Gdx.input.isKeyPressed(Input.Keys.LEFT) && player.b2body.getLinearVelocity().x >= -2)
            player.b2body.applyLinearImpulse(new Vector2(-0.1f, 0), player.b2body.getWorldCenter(), true);

    }

    public void update(float dt){
        handleInput(dt);

        world.step(1/60f, 6, 2);
        player.update(dt);
        gameCam.position.x = player.b2body.getPosition().x;





        gameCam.update();
        renderer.setView(gameCam);

    }

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

        b2dr.render(world, gameCam.combined);

        game.batch.setProjectionMatrix(gameCam.combined);
        game.batch.begin();
        player.draw(game.batch);
        game.batch.end();

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

    }

    @Override
    public void resize(int width, int height) {
        gamePort.update(width, height);


    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {
        map.dispose();
        renderer.dispose();
        world.dispose();
        b2dr.dispose();
        hud.dispose();

    }
}

public class DBZ extends Game{
    public SpriteBatch batch;
    public  static final int V_WIDTH = 400;
    public  static final int V_HEIGHT = 208;
    public static final float PPM = 100;


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

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

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

public class Goku extends Sprite {
    public World world;
    public Body b2body;
    private TextureRegion gokuStand;

    public Goku(World world, PlayScreen screen){
        super(screen.getAtlas().findRegion("goku_sprite"));
        this.world = world;
        defineGoku();
        gokuStand = new TextureRegion(getTexture(), 5,12,59,85);
        setBounds(0,0,59/DBZ.PPM,85/DBZ.PPM);
        setRegion(gokuStand);

    }

    public void defineGoku(){
        BodyDef bdef = new BodyDef();
        bdef.position.set(32/DBZ.PPM,32/DBZ.PPM);
        bdef.type = BodyDef.BodyType.DynamicBody;
        b2body = world.createBody(bdef);

        FixtureDef fdef = new FixtureDef();
        PolygonShape shape = new PolygonShape();
        shape.setAsBox(59/2/DBZ.PPM, 85/2/DBZ.PPM);

        fdef.shape = shape;
        b2body.createFixture(fdef);

    }

    public void update(float dt){
        setPosition(b2body.getPosition().x - getWidth()/2, b2body.getPosition().y - getHeight()/2 );

    }

}
renderer=新的正交平铺贴图渲染器(贴图,1/DBZ.PPM),
gameCam.position.set(gamePort.getWorldWidth()/2,
gamePort.getWorldHeight()/2,0);,
gameCam=新的正交摄影机();
gamePort=新的FitViewport(DBZ.V_宽度/DBZ.PPM,DBZ.V_高度/DBZ.PPM,gameCam);
公共类PlayScreen实现屏幕{
私人DBZ游戏;
私人正交摄影机;
专用视口游戏端口;
私人抬头显示器;
专用TmxMapLoader映射加载器;
私人平铺地图;
私有正交瓦片渲染器;
私人世界;
私人邮箱2DDR;
私人小悟空玩家;
私人地图集;
公共播放屏幕(DBZ游戏){
atlas=新的TextureAtlas(“悟空包”);
这个。游戏=游戏;
gameCam=新的正交摄影机();
gamePort=新的FitViewport(DBZ.V_宽度/DBZ.PPM,DBZ.V_高度/DBZ.PPM,gameCam);
hud=新hud(游戏批处理);
maploader=新的TmxMapLoader();
map=maploader.load(“level1.tmx”);
渲染器=新的正交平铺贴图渲染器(贴图,1/DBZ.PPM);
gameCam.position.set(gamePort.getWorldWidth()/2,gamePort.getWorldHeight()/2,0);
世界=新世界(新矢量2(0,-10),真);
b2dr=新的Box2DebugRenderer();
新的B2WorldCreator(世界,地图);
玩家=新小悟空(世界,这个);
}
公共纹理图集(){
返回地图集;
}
@凌驾
公开展览({
}
公共无效手动输入(浮动dt){
if(Gdx.input.isKeyJustPressed(input.Keys.UP))
player.b2body.applylinearpulse(新向量2(0,4f),player.b2body.getWorldCenter(),true);
if(Gdx.input.isKeyPressed(input.Keys.RIGHT)和&player.b2body.getLinearVelocity().x=-2)
player.b2body.applylinearpulse(新向量2(-0.1f,0),player.b2body.getWorldCenter(),true);
}
公共无效更新(浮动dt){
handleInput(dt);
世界.步骤(1/60f、6、2);
player.update(dt);
gameCam.position.x=player.b2body.getPosition().x;
gameCam.update();
渲染器.setView(gameCam);
}
@凌驾
公共无效渲染(浮动增量){
更新(增量);
glClearColor(0,0,0,0);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
render.render();
b2dr.render(世界、游戏摄影机、组合);
game.batch.setProjectionMatrix(gameCam.combined);
game.batch.begin();
玩家。抽签(游戏。批量);
game.batch.end();
game.batch.setProjectionMatrix(hud.stage.getCamera().combined);
hud.stage.draw();
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
游戏端口。更新(宽度、高度);
}
@凌驾
公共空间暂停(){
}
@凌驾
公众简历(){
}
@凌驾
公共空间隐藏(){
}
@凌驾
公共空间处置(){
map.dispose();
renderer.dispose();
世界。处置();
b2dr.dispose();
dispose();
}
}
公共类DBZ扩展游戏{
公共SpriteBatch批次;
公共静态最终内部V_宽度=400;
公共静态最终内部V_高度=208;
公共静态最终浮动PPM=100;
@凌驾
公共void创建(){
批次=新的SpriteBatch();
设置屏幕(新的播放屏幕(本));
}
@凌驾
公共无效渲染(){
super.render();
}
@凌驾
公共空间处置(){
batch.dispose();
}
}
公共类小悟空扩展精灵{
公共世界;
公共机构;
戈库斯坦私人酒店;
公共小悟空(世界,游戏屏幕){
super(screen.getAtlas().findRegion(“小悟空精灵”);
这个世界=世界;
defineGoku();
gokuStand=新纹理区域(getTexture(),5,12,59,85);
立根(0,0,59/DBZ.PPM,85/DBZ.PPM);
setRegion(gokuStand);
}
公共无效定义库(){
BodyDef bdef=新的BodyDef();
bdef.position.set(32/DBZ.PPM,32/DBZ.PPM);
bdef.type=BodyDef.BodyType.DynamicBody;
b2body=world.createBody(bdef);
FixtureDef fdef=新的FixtureDef();
多边形形状=新的多边形形状();
形状设置框(59/2/DBZ.PPM,85/2/DBZ.PPM);
fdef.shape=形状;
b2body.createFixture(fdef);
}
公共无效更新(浮动dt){
setPosition(b2body.getPosition().x-getWidth()/2,b2body.getPosition().y-getHeight()/2);
}
}

我相信你想要的是将相机夹在地图上的能力。 这可以使用MathUtils.clamp实现

gameCam.position.x = MathUtils.clamp(gameCam.position.x, viewportWidth/2 , 38 - viewportWidth/2);
gameCam.position.y = MathUtils.clamp(gameCam.position.y, viewportHeight/2, 208 - viewportHeight/2);
编辑:更新的播放屏幕:

package com.edwin.game.Screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.maps.tiled.TiledMap;
import com.badlogic.gdx.maps.tiled.TmxMapLoader;
import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import com.edwin.game.DBZ;
import com.edwin.game.Scenes.Hud;
import com.edwin.game.Sprites.Goku;
import com.edwin.game.Tools.B2WorldCreator;

/**
 * Created by Edwin on 3/20/2017.
 */
public class PlayScreen implements Screen {
private  DBZ 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 Goku player;
private TextureAtlas atlas;
private float viewportWidth;
private float viewportHeight;


public PlayScreen(DBZ game){
    atlas = new TextureAtlas("goku.pack");
    this.game=  game;
    gameCam = new OrthographicCamera();
    gamePort = new FitViewport(DBZ.V_WIDTH/DBZ.PPM, DBZ.V_HEIGHT/DBZ.PPM, gameCam);


    hud = new Hud(game.batch);
    maploader= new TmxMapLoader();
    map = maploader.load("level1.tmx");


    renderer = new OrthogonalTiledMapRenderer(map, 1/DBZ.PPM);

    viewportWidth = gamePort.getWorldWidth();
    viewportHeight= gamePort.getWorldHeight();

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

    new B2WorldCreator(world,map);

    player = new Goku(world, this);


}

public TextureAtlas getAtlas(){
    return atlas;
}

@Override
public void show() {

}

public void handleInput(float dt){
    if (Gdx.input.isKeyJustPressed(Input.Keys.UP))
        player.b2body.applyLinearImpulse(new Vector2(0, 4f), player.b2body.getWorldCenter(), true);
    if (Gdx.input.isKeyPressed(Input.Keys.RIGHT) && player.b2body.getLinearVelocity().x <= 2)
        player.b2body.applyLinearImpulse(new Vector2(0.5f, 0), player.b2body.getWorldCenter(), true);
    if (Gdx.input.isKeyPressed(Input.Keys.LEFT) && player.b2body.getLinearVelocity().x >= -2)
        player.b2body.applyLinearImpulse(new Vector2(-0.1f, 0), player.b2body.getWorldCenter(), true);

}

public void update(float dt){
    handleInput(dt);

    world.step(1/60f, 6, 2);
    player.update(dt);
    gameCam.position.x = player.b2body.getPosition().x;

    // cam pos                          / var to clamp       / min val          / max val
    gameCam.position.x = MathUtils.clamp(gameCam.position.x, viewportWidth/2 , 38 - viewportWidth/2);
    gameCam.position.y = MathUtils.clamp(gameCam.position.y, viewportHeight/2, 208 - viewportHeight/2);

    System.out.println(gameCam.position.x);


    gameCam.update();
    renderer.setView(gameCam);

}

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

    //

    b2dr.render(world, gameCam.combined);

    game.batch.setProjectionMatrix(gameCam.combined);
    game.batch.begin();
    player.draw(game.batch);
    game.batch.end();

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

}

@Override
public void resize(int width, int height) {
    gamePort.update(width, height);


}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

@Override
public void dispose() {
    map.dispose();
    renderer.dispose();
    world.dispose();
    b2dr.dispose();
    hud.dispose();

}
}
package com.edwin.game.Screens;
导入com.badlogic.gdx.gdx;
导入com.badlogic.gdx.Input;
导入com.badlogic.gdx.Screen;
导入com.badlogic.gdx.graphics.GL20;
导入com.badlogic.gdx.graphics.Orthographic Camera;
导入com.badlogic.gdx.graphics.g2d.TextureAtlas;
导入com.badlogic.gdx.maps.tiled.TiledMap;
导入com.badlogic.gdx.maps.tiled.TmxMapLoader;
导入com.badlogic.gdx.maps.tiled.renders.OrthogonalTiledMapRenderer;
导入com.badlogic.gdx.math.MathUtils;
导入com.badlogic.gdx.math.Vector2;
导入com.badlogic.gdx.physics.box2d.box2debugrender;
导入com.badlogic.gdx.physics.box2d.World;
导入com.badlogic.gdx.utils.viewport.FitViewport;
导入com.badlogic.gdx.utils.viewport.viewport;
导入com.edwin.game.DBZ;
导入com.edwin.game.Scenes.Hud;
导入com.edwin.game.Sprites.Goku;
导入com.edwin.game.Too
public float gokuStartingPositionX;

public PlayScreen(DBZ game){
    .....
    new B2WorldCreator(world,map);

    gokuStartingPositionX=64/DBZ.PPM;  //added in your method
    player = new Goku(world, this);
} 

public void update(float dt){
    handleInput(dt);

    world.step(1/60f, 6, 2);
    player.update(dt);
    //camera position is decided by player position and keep camera in this way so it cover whole viewport width with screen
    gameCam.position.x = player.b2body.getPosition().x + gamePort.getWorldWidth()/2 - gokuStartingPositionX;

    gameCam.update();
    renderer.setView(gameCam);
}
public Goku(World world, PlayScreen screen){
    super(screen.getAtlas().findRegion("goku_sprite"));
    this.world = world;
    defineGoku(screen.gokuStartingPositionX);

    gokuStand = new TextureRegion(getTexture(), 5,12,59,85);
    setBounds(0,0,59/DBZ.PPM,85/DBZ.PPM);
    setRegion(gokuStand);

}

public void defineGoku(float startX){
    BodyDef bdef = new BodyDef();
    bdef.position.set(startX,32/DBZ.PPM);
    bdef.type = BodyDef.BodyType.DynamicBody;
    b2body = world.createBody(bdef);
    ... 
}