LibGDX ViewPort不断对视口进行平方

时间:2015-11-28 11:33:39

标签: java android libgdx

任何人都可以了解视口或ortographic相机的这种行为吗?我希望绘制一个矩形视口,但我得到的是在方框中挤压的所有东西。我上传了一张图片,告诉你发生了什么。绿色圆圈的中心正在被绘制到点(100,100),所以很明显,它看起来太不成比例了。红色正方形的大小应该是400x400,但从它看起来的方式判断,它不是。宽高比完全关闭。我不知道造成这个问题的原因。忽略中心的小马里奥。这是由其他相机在其他地方渲染的。

有人知道可能导致它的原因吗?

/ **  *由Omer于2015年11月24日创建。  * / 公共课播放扩展GameStateBase {

public static final int CAMERA_TYPE_SCREEN = 0;
public static final int CAMERA_TYPE_MAP = 1;

private Viewport SCREEN_VIEW;
private Viewport MAP_VIEW;

private OrthographicCamera SCREEN_CAM;
private OrthographicCamera MAP_CAM;

AssaultTrooper assaultTrooper;
GamePad GAME_PAD;

public Play(GameStateManager _gameStateManager) {
    super(_gameStateManager);



    SCREEN_CAM = new OrthographicCamera();
    SCREEN_VIEW = new FitViewport(GameGraphics.VIRTUAL_WIDTH,GameGraphics.VIRTUAL_HEIGHT,SCREEN_CAM);
    SCREEN_VIEW.apply();
    SCREEN_CAM.translate(GameGraphics.VIRTUAL_WIDTH/2,GameGraphics.VIRTUAL_HEIGHT/2);
    SCREEN_CAM.update();

    MAP_CAM = new OrthographicCamera();
    MAP_VIEW = new FitViewport(GameGraphics.VIRTUAL_HEIGHT,GameGraphics.VIRTUAL_HEIGHT,MAP_CAM);
    MAP_VIEW.apply();
    MAP_CAM.translate(GameGraphics.VIRTUAL_HEIGHT/2,GameGraphics.VIRTUAL_HEIGHT/2);
    MAP_CAM.update();

    RENDER_STATE.addCamera(CAMERA_TYPE_SCREEN,SCREEN_CAM);
    RENDER_STATE.addCamera(CAMERA_TYPE_MAP,MAP_CAM);

    GAME_PAD = new GamePad();

    RenderStateManager.changeGameRenderState(RENDER_STATE);
    GAME_PAD.setCameraType(CAMERA_TYPE_SCREEN);
    GAME_PAD.addToRenderState();

    assaultTrooper = new AssaultTrooper(GameSettings.TEAM_BLUE,new Location(200,200));
    assaultTrooper.setCameraType(CAMERA_TYPE_MAP);
    assaultTrooper.addToRenderState();
}

@Override
public void render(SpriteBatch _spriteBatch) {
    try {
        RenderStateManager.RENDERING_STATE.render(_spriteBatch);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

@Override
public void handleInput() {

}

@Override
public void update(float deltaTime) {

}


@Override
public void dispose() {

}

@Override
public void reSize(int _width, int _height) {
  SCREEN_VIEW.update(_width,_height);
  MAP_VIEW.update(_width,_height);

}

}

private ConcurrentHashMap<Long,Location> locations;
private ConcurrentHashMap<Long,Sprite> sprites;
private ConcurrentHashMap<Integer,OrthographicCamera> cameras;
private ConcurrentHashMap<Integer,List<Long>> cameraMapping;
 public void render(SpriteBatch _spriteBatch) throws InterruptedException {

    synchronized (this) {

        for (int key : cameras.keySet()) {
            _spriteBatch.setProjectionMatrix(cameras.get(key).combined);
            _spriteBatch.begin();
            if (cameraMapping.get(key) == null) {
                _spriteBatch.end();
                continue;
            }
            for (long MAPPER : cameraMapping.get(key)) {
                sprites.get(MAPPER).draw(_spriteBatch);

            }
            _spriteBatch.end();
        }

    }

}

enter image description here

0 个答案:

没有答案