如何防止像素流血在旧iOS设备上渲染使用Zwoptex生成的精灵表?

时间:2013-02-22 11:28:45

标签: ios cocos2d-x sprite-sheet zwoptex

我打包了几个单独的精灵,用Zwoptex生成了一个2048 * 2048大的精灵表。但我缩小以匹配每个iOS设备,如iPad HD 2048 * 2048,iPhone 512 * 512等。

我发现Zwoptex中的“Spacing Pixel”选项会影响设备上精灵渲染的效果。该值表示在精灵表内填充的每个单独精灵之间的空格(以像素为单位)。例如,如果我将该值设置得太低,则在更新或更好的设备以及旧设备上出现像素流失的可能性更大。但是如果我增加这个值,那么机会就会降低,而且某个值足够高,就不会出现像素出血(希望如此)。

无论如何,我将值设置为17-20左右,这非常高,并且它在精灵表上消耗了宝贵的空间。结果是,在iPhone模拟器上,仍然存在问题。

由于我们只能限制某些设备为某些iOS版本安装游戏,但iPhone 3GS仍然可以更新到最新版本,因此我需要解决这个问题。

所以我想知道如何防止像iPhone到iPad(包括视网膜)在内的所有iOS设备上出现像素出血问题的解决方案。 知道任何最佳实践或实际解决方案,在精灵之间为“间距像素”选择特定值以在渲染时消除问题,将会很棒。

1 个答案:

答案 0 :(得分:2)

如果只有模拟器显示这些工件,那么无论如何都要忽略它们!你的用户都不会在模拟器中运行你的应用程序,不是吗?模拟器并不完美。

每个纹理图集精灵框架周围2个像素的间距足以(并且通常建议)消除由像素出血引起的所有伪影。如果你仍然看到文物,它们不是间距太小的直接原因。他们不可能。

我不确定Zwoptex,你真的必须手动创建纹理图集的每个缩小版本吗?你可能在做那些事情。试试TexturePacker,如果文物像那样消失,我不会感到惊讶。

例如,一种类型的工件是由于没有将对象放在整数位置引起的。如果两个对象的位置类似于(1.23545,10.0)和(41.23545,10.0),则可能会看到两个对象之间存在间隙(通常为黑线)。使用整数坐标(1,10)和(41,10)可以解决问题。困难在于,这一直到层次结构,如果这些对象的父节点也在非整数位置,您仍然可以遇到此线间隙工件。

如果你在周围搜索,你会发现cocos2d文物的众多因果讨论。要记住一件事:不要使用CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL宏。这不是一个修复,它甚至没有接近。它有点修复非整数位置伪像并引入另一个(更糟糕的恕我直言):移动过程中的混叠/闪烁。