libgdx使用camera.setToOrtho时失真纹理(false,GAME_WIDTH,GAME_HEIGHT);

时间:2014-07-23 18:31:01

标签: java android textures

我正在尝试制作libgdx游戏,现在我遇到了2个问题: 1.当我使用camera.setToOrtho(false,GAME_WIDTH,GAME_HEIGHT)时;我的玩家的文本很沮丧,一只眼睛比另一只眼睛大。 我正在使用这台相机和viweport:

camera= new OrthographicCamera(GAME_WIDTH,GAME_HEIGHT);
camera.setToOrtho(false, GAME_WIDTH, GAME_HEIGHT);
viewport = new StretchViewport(GAME_WIDTH,GAME_HEIGHT,camera); 

当我这样做时:

touchPos.set(Gdx.input.getX(1),Gdx.input.getY(1),0);
 game.camera.unproject(touchPos);
System.out.println(touchPos.x+" "+ touchPos.y);

我在右上角得到0 0但我的角色巫婆0 0画在左下角。

当我使用时:

 game.camera = new OrthographicCamera(820,480);
game.viewport = new FillViewport(820,480,game.camera);

我必须使用game.batch.setProjectionMatrix(game.camera.combined);

当我使用这个代码时,我已经完成了unproject方法和坐标系统的工作,但是我的纹理质量很差。

当我使用时:

camera = new PerspectiveCamera();
viewport = new StretchViewport(900, 470, camera);

我的纹理和纹章都很糟糕。我不能使用:game.batch.setProjectionMatrix(game.camera.combined);

1 个答案:

答案 0 :(得分:0)

由于您使用相机的固定宽度和高度,因此它会被扭曲,所以它只是伸展以适合您正在放置的任何尺寸的窗口/屏幕。

顺便说一句,StretchViewport做同样的事情(扭曲场景以适应你给窗口的尺寸)。但是你刚刚创建了一个视口而没有实际调用它update(),所以它没有做任何事情。

您最有可能希望使用ExtendViewport或FillViewport来避免拉伸,但也可以使用其他选项。阅读他们here

除非您将viewport.update(width,height)放入调整大小方法,否则您的视口无法正确响应屏幕旋转(或桌面窗口调整大小)。而且,无论使用实际的屏幕尺寸,您都必须至少调用update一次。只需将viewport.update(width,height)放入resize方法即可,这非常方便。