gpt4 book ai didi

Java/LibGDX 缩放问题

转载 作者:行者123 更新时间:2023-11-30 02:00:00 26 4
gpt4 key购买 nike

我正在 libgdx 中创建一个游戏,在 1920x1080 宽高比和 1280x720 下一切正常。问题是,某些分辨率(例如在计算机上也很常见的 1366x768)无法被我的纹理大小(16px)整除,并且它不完全是 16*9,这使得某些像素变得太长或太高。这是正在发生的事情的图像。如果放大你会发现一些像素真的很奇怪。 image

希望这是足够的信息,如果还不够,请告诉我。

最佳答案

如果所需的分辨率不适合游戏的宽高比,则需要裁剪绘制区域。

在渲染例程下,您应该计算正确的视口(viewport)

@Override
public void render() {

[...]

// set viewport
Gdx.gl.glViewport((int) _viewport.x, (int) _viewport.y,
(int) _viewport.width, (int) _viewport.height);
[...]
}

要计算正确的视口(viewport),您可以使用此函数(我基于 libgdx 为我的游戏引擎编写了此函数)

  • 宽度:当前窗口宽度,
  • height:当前窗口高度,
  • virtualHeight/Width:游戏的原始分辨率(即 1920x1080)
public Rectangle resize(float width, float height){

float aspectRatio = (float)width/(float)height;
float scale = 1.0f;
Vector2 crop = new Vector2(0f, 0f);

if(aspectRatio > getAspectRatio())
{
scale = (float)height/(float)getVirtualLandHeight();
crop.x = (width - getVirtualLandWidth()*scale)/2f;
}
else if(aspectRatio < getAspectRatio())
{
scale = width/(float)getVirtualLandWidth();
crop.y = (height - getVirtualLandHeight()*scale)/2f;
}
else
{
scale = (float)width/(float)getVirtualLandWidth();
}

float w = (float)getVirtualLandWidth()*scale;
float h = (float)getVirtualLandHeight()*scale;

Rectangle viewport = new Rectangle(crop.x, crop.y, w, h);

return viewport;
}

public float getAspectRatio(){
return getVirtualLandWidth() / getVirtualLandHeight();
}

关于Java/LibGDX 缩放问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53211402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com