当前位置: 首页 > 知识库问答 >
问题:

在libGDX中展开纹理

司空镜
2023-03-14

再详细一点。我不使用Block2D。瓦片大小由8x8缩放为20x20。使用没有填充的texturepacker(无论如何填充都会出现问题)。我不知道该发布哪段代码,因为我不知道问题可能出在哪里,所以这里只是简单的块类。如果有任何帮助,我将不胜感激,谢谢。

public class Block extends Sprite {

private int[] id = { 0, 0 };
public Rectangle rect;
private int textureSize = 8;

public Block(PlayScreen play,String texture, int x, int y, int[] id) {
    super(play.getAtlas().findRegion("terrain"));
    this.id = id;
    rect = new Rectangle(x, y, ID.tileSize, ID.tileSize);
    setRegion(id[0] * textureSize, id[1] * textureSize + 32, textureSize, textureSize);
    setBounds(rect.x, rect.y, rect.width, rect.height);
}

public void render(SpriteBatch batch) {
    draw(batch);

}

共有1个答案

王棋
2023-03-14

欢迎来到libgdx!

这里没有足够的代码来说明问题到底是什么,但我猜测在代码的某个地方,您混淆了像素空间和游戏空间。

当你第一次创建一个2D的libGDX游戏时,你会觉得你只是在屏幕上画像素。毕竟你的屏幕是以像素来衡量的,你的窗口是以像素来衡量的,你的纹理是以像素来衡量的。

你可能已经知道,你的游戏使用三个东西来渲染:一个视区(可以绘制游戏的屏幕补丁),一个相机(把它想象成一个真正的相机--你可以改变镜头的位置和大小来改变你的世界的“视野”),以及你的游戏对象(你可能想要或不想要绘制的东西,这取决于相机是否可以看到它们)。

现在让我们看看它们是如何测量的:

  • 视区:这是屏幕的一块(设置为游戏窗口的大小),因此以像素为单位。
  • 相机:相机很有趣,因为它的大小和位置是以游戏单位来衡量的,而不是像素。由于viewport使用相机来知道在屏幕上绘制什么,所以它确实包含GU到pixel的映射。
  • 游戏对象:这是以游戏单位来衡量的。它可能具有以像素为单位的纹理,但与游戏对象的“真实大小”不同。

现在libGDX将所有这些尺寸都默认为1 GU==1像素,这误导了很多人,让他们认为一切都是以像素来衡量的。一旦你意识到事实并非如此,就会有一些很酷的暗示。

第一个含义是,即使我的屏幕尺寸改变了,我的相机尺寸也可以保持不变。例如,如果我有一个800x600像素的小屏幕,我可以将我的相机大小设置为40x30。这保持了一个很好的纵横比,并允许我在屏幕上绘制40x30块。

如果屏幕大小发生变化(比如说变到1440x900),我的游戏仍然会在屏幕上显示40x30块。如果纵横比发生变化,它们可能看起来有点拉长,但是libGDX有一些特殊的视图可以抵消这种影响。这使它更容易支持您的游戏在其他显示器,其他设备,甚至只是处理屏幕大小。

 类似资料:
  • 如果我创建一个.png 1024 x 1024的纹理,并在中间画一个124 x 124的圆,它的周围将是空的,它使用的RAM是否与我在124x124空间上画一个124 x 124的圆相同?

  • 我希望你能帮我找到错误。干杯,Joshflux 编辑:我很确定,它必须做一些事情与窗口的大小。如果我将窗口的高度从800调整为200,那么左角的人看起来是一样的,但是中间的人要小得多。但还是不知道怎么解决...

  • 我用libgdx和box2d做卡车游戏。在我的游戏中,1米=100像素。我的2D地形是由我生成的,是由点制作的。 我所做的,是为整个多边形创建一个polygonregion并使用texturewrap.repeat。问题是,我的游戏大小被缩小了100倍,以适应box2d单位。 所以我的相机宽度是800/100,高度是480/100。(8x4.8像素)

  • 更新1 如您所见,在FrameBuffer上绘制的LibGDX纹理,与直接在SpriteBatcher上绘制的纹理相比,在SpriteBatcher上绘制的纹理要比原始纹理暗一些。 左侧为原图,比手机1080x1920屏幕小50%。 右侧部分是先在FrameBuffer上绘制的TextureRegion,然后在SpriteBatch上绘制,如下代码所示: 如你所见,它比直接从纹理绘制的图像暗一点。

  • 我试图旋转纹理时,我画他们。我认为这样做比在Paint.NET中旋转图像90度并将它们保存在不同的文件中更有意义。我查看了api文档中spritebatch绘图参数,但我就是不明白。有一堆参数,比如srcX、srcY、originX等等。我也想知道如何做同样的纹理区域。以下是api文档页面的链接:http://libgdx.badlogicgames.com/nightlies/docs/api/

  • 我刚刚决定将Slick2D改为libgdx。然而,为了能够将我的游戏移植到LibGDX,我需要帮助理解如何从我的游戏数据文件在LibGDX中创建纹理。 我的游戏数据文件是加密的,图像是用base64编码的,所以我可以把它们都保存在一个txt文件中。如何从ByteArrayInputStream创建LibGDX纹理。 编辑:我刚刚想通了,有点。我是这样做的: 然而,现在图像是垂直翻转的...我是不是