0

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

我发现 Zwoptex 中的“间距像素”选项会影响精灵在设备上渲染的结果。该值表示在 sprite-sheet 中打包的每个单独的 sprite 之间的空间(以像素为单位)。例如,如果我将该值设置得太低,那么在更新或更好的设备以及旧设备上出现像素出血的可能性就更大。但是如果我增加这个值,机会就会降低,并且对于某个足够高的值,像素出血(希望)不会发生。

无论如何,我将值设置为 17-20 左右,这非常高,并且会占用精灵表上的宝贵空间。结果是,在 iPhone 模拟器上,还是有问题。

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

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

4

1 回答 1

2

如果只有模拟器显示这些工件,那么请务必忽略它们!您的任何用户都不会在模拟器中运行您的应用程序,对吗?模拟器并不完美。

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

我不确定 Zwoptex,您实际上是否必须手动创建纹理图集的每个缩小版本?你可能在那里做错了什么。试试TexturePacker,如果工件就这样消失了,我不会感到惊讶。

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

如果您四处搜索,您会发现大量关于 cocos2d 工件的因果讨论。要记住一件事:不要使用 CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 宏。这不是一个修复,它甚至没有接近。它有点修复了非整数位置伪影并引入了另一个(更糟糕的恕我直言):运动过程中的混叠/闪烁。

于 2013-02-22T12:49:59.410 回答