Shi*_*e85 7 sprite orthographic libgdx texturepacker texture-atlas
我是一个Android开发人员,使用LibGDX构建我的第一个游戏.阅读A LOT后,还有一件事我不明白.
我意识到我应该拥有一组图像,最高分辨率为2560x1440(用于防止丑陋的放大而不是矢量图像).
我正在使用TexturePacker打包我的图像,甚至使用线性线性来获得最高质量:
TexturePacker.Settings settings = new TexturePacker.Settings();
settings.filterMin = Texture.TextureFilter.Linear;
settings.filterMag = Texture.TextureFilter.Linear;
settings.maxWidth = 4096;
settings.maxHeight = 2048;
TexturePacker.process(settings, inputDir, outputDir, packFileName);
Run Code Online (Sandbox Code Playgroud)
我按照几个SO的建议将我的相机设置为固定的仪表并避免所有的PPM.来自Screen的C'TOR:
mCamera = new OrthographicCamera();
mCamera.viewportWidth = 25.6f; ; // 2560 / 100
mCamera.viewportHeight = 14.4f ; // 1440 / 100
mCamera.position.set(mCamera.viewportWidth / 2, mCamera.viewportHeight / 2, 0f);
mCamera.update();
Run Code Online (Sandbox Code Playgroud)
如你所见,我选择使用1米= 100像素.
现在,这意味着我应该用1/100大小绘制我的精灵,我在这里做:
TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("images/pack.atlas"));
mImage = atlas.createSprite("image"));
mImage.setSize(mImage.getWidth() / 100 , mImage.getHeight() / 100);
Run Code Online (Sandbox Code Playgroud)
这有效,图像按预期显示.但是,他们被歪曲了!一个完美的圆形图像看起来像边缘像素化而不是圆形.
所以,我的问题是:
谢谢!
编辑
我要适应@ Tenfour04对(1)和(2)的回答.
关于(3),问题在于Genymotion :(,它将游戏像素化.我在具有多种分辨率的真实设备上进行测试,看起来很完美.
您在设置相机时犯了一个错误:您假设屏幕的宽高比始终相同,但实际上它会有所不同。最好选择恒定的高度或宽度(根据您正在制作的游戏类型进行选择)并根据当前屏幕的宽高比调整相反的尺寸。例如:
mCamera.viewportHeight = 25.6f; //game screen always 25.6 meters tall
mCamera.viewportWidth = 25.6f / (float)Gdx.graphics.getHeight() *
(float)Gdx.graphics.getWidth();
“我应该有一组最高分辨率的图像”这不一定是真的。如果这样做,您将不得不在无法利用它们的设备上加载非常高分辨率的图像。这将使用大量内存并增加加载时间。在开发过程中可能没问题,但以后您可能会想要有两个或三个不同的较小分辨率版本,您可以有选择地加载。
出于这个原因,我也会避免100在代码中的任何地方进行硬编码。创建pixelsPerMeter一个在游戏启动时设置一次的变量。目前它只能是 100,但如果您决定稍后制作一些较小分辨率的艺术作品,您可以相应地调整它,而不必在代码中查找所有出现的 100。
您的最小过滤器应该是MipMapLinearLinear或MipMapLinearNearest。否则,当绘制的精灵小于其原始分辨率时,性能将会受到影响,并且可能会像您所描述的那样看起来扭曲。您可以查找 mip 映射来了解为什么会出现这种情况。
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |