2个月前,我偶然发现了我正在开发的游戏无法与其他设备一起扩展的问题.
因此,我决定实施视口,因为人们说这是最好的方法,也是一种简便的方法.
但是距我入职已经两个月了,仍然没有一个可行的例子.我已经阅读了我能找到的每一个页面,多次阅读了Wiki,并问了几个人,但从未得到帮助我使其正常工作的答案.
所以问题是我需要做三件事,首先我有一个舞台,这是我要把所有演员放在(按钮和东西)上,然后在这种情况下我需要我的摄像头,然后是OrthographicCamera,视口可缩放所有内容.
这是我最新的测试:http://pastebin.com/ZvZmeHLs
我的创作
@Override
public void create () {
cam = new OrthographicCamera(800, 600);
viewport = new FillViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), cam);
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true);
stage = new Stage(viewport);
atlas = new TextureAtlas("LoadingScreen.pack");
Logo = new Image(atlas.findRegion("VeslaLogo"));
stage.addActor(Logo);
}
和我调整大小
@Override
public void resize(int Width, int Height) {
viewport.update(Width, Height, true);
Logo.setSize(700, 500);
Logo.setX(Width / 2 - Logo.getWidth() / 2);
Logo.setY(Height / 2 - Logo.getHeight() / 2);
Logo.setOrigin(Logo.getWidth() / 2, Logo.getHeight() / 2);
}
我首先以为它可以正常工作,它看起来不错,可以在屏幕上显示所有内容,但是当我在s4 mini上对其进行测试时,它变大了.现在我不知道这是因为我只是不了解视口还是因为我认为方法过于复杂.我唯一知道的是我完全迷路了,不知道还能尝试什么.因此,如果有人可以将我推向正确的方向,或者可以向我解释为什么这没有用,那就太好了.
ps:我也用固定尺寸进行了测试,但是由于某些原因这没有任何区别
固定尺寸一的样本:http://pastebin.com/mpjkP9ru
private int VIRTUAL_WIDTH = 600;
private int VIRTUAL_HEIGHT = 900;
@Override
public void create () {
stage = new Stage(new StretchViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT));
cam = new OrthographicCamera(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
}
和我调整大小
@Override
public void resize(int Width, int Height) {
Width = VIRTUAL_WIDTH;
Height = VIRTUAL_HEIGHT;
stage.getViewport().update(Width, Height, true);
}
如果需要更多示例或任何其他内容,请让我知道,我处于某种状态,我将尽一切努力使其正常运行
编辑:我设法使其在@donfuxx的帮助下工作.对于那些对代码感兴趣的人:http://pastebin.com/8v2PB2t9
解决方法:
在您发布的代码中,您似乎错误地使用了resize方法,因为您正在使用恒定的(!)值更新视口(因此,您始终将width / height设置为600/900,没什么奇怪的,您不会看到对其他参数的调整屏幕尺寸):
@Override
public void resize(int Width, int Height) {
Width = VIRTUAL_WIDTH;
Height = VIRTUAL_HEIGHT;
stage.getViewport().update(Width, Height, true);
}
相反,您应该像viewports wiki中建议的那样进行操作,并设置适当的宽度/高度值:
@Override
public void resize(int width, int height) {
// use true here to center the camera
// that's what you probably want in case of a UI
stage.getViewport().update(width, height, false);
}
顺便说一句:还摆脱了您的resize方法中的Logo大小调整代码!
更新:另外,我注意到您最好像这样初始化视口和相机(使用具有camera参数的视口构造函数):
cam = new OrthographicCamera(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);
viewport = new StretchViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, cam); //notice cam param here!
stage = new Stage(viewport);
代替:
stage = new Stage(new StretchViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT));
cam = new OrthographicCamera(VIRTUAL_WIDTH, VIRTUAL_HEIGHT);