我正在尝试写一个纸牌游戏,中间会有一个图像,一个彩色边框,左上角可能是一个符号。我正在使用libgdx和stage / scene2d。
图像会根据套装而改变(这些不是普通的52套牌),边框颜色会改变以匹配套装,虽然这种颜色可以由用户预先决定,所以我可以'预先保存彩色图像(虽然我想我可以预先保存大约15种差异颜色并给用户选择15种)并且符号只会出现在某些卡片而不是其他卡片上。
从我添加的两张图片中可以看出,我有两张差异图像,边框颜色和符号。
我的问题与团体和透支有关。
1)我认为我应该建立一个包含3张图像的小组,并且我希望这会让我的游戏减速,因为我可能会同时在屏幕上显示30张牌和30组每个最多可以有3张图像可以画很多。这是正确的,LibGDX能够处理好吗?
2)我应该如何做彩色边框?我应该让整张卡片都是彩色矩形,并在顶部绘制图像吗?绘制方法是否会尝试在图像下方绘制彩色部分,从而浪费GPU / CPU时间?我的一个朋友说我可以只有一个白色图像,然后在代码中使用RGB值设置颜色?这可能吗?这意味着我只能拥有一个jpg,这对于apk大小来说会更好。
3)或者我应该忽略使用jpg图像并尝试使用ShapeRenderer绘制彩色方块?
谢谢,我希望这些问题在一篇文章中不会太多。
答案 0 :(得分:0)
当然它不会减慢游戏速度 - 屏幕上的90个( 30组x 3纹理)精灵就像 nothing (我猜)每个框架 - 所以LibGDX也会这样做。
虽然但这些图形的存储方式确实很重要!请在许多文件中使用一个TextureAtlas所有纹理而不是许多纹理 - 您可以使用TexturePacker准备Atlas(对于像免费版这样的基本用法就可以了)。
这样做的原因是,如果你使用很多单Textures个LibGDX需要在渲染它们之前切换GPU中的图形(可能它不是完美的术语) - 如果你有一个大的纹理(包括其他)它不需要切换任何东西,因为buffor没有任何变化。
要获取有关使用TextureAtlas的更多信息,请查看manual
actor.addAction(Actions.color(new Color(1f,1f,1f, 0.2f), 2f));
另一种方法是每种颜色都有 1px x 1px 纹理(打包在纹理图集中),只是为了改变它的大小。 没有理由保持全尺寸单色纹理,因为它很有空间和记忆。
使用ShapeRenderer通常不是一个好主意 - 当然它有时会有所帮助,但绘制精灵有更好的表现。
你通常对性能有点太害怕但是如果你想保存你的CPU而不想使用ShapeRenderer似乎是个好主意。