【问题标题】:How to prevent pixel bleeding from rendering sprite-sheet generated with Zwoptex on older iOS device?如何防止像素出血在较旧的 iOS 设备上渲染使用 Zwoptex 生成的精灵表?
【发布时间】:2013-02-08 00:15:14
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ios cocos2d-x sprite-sheet zwoptex


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我使用程序自动为我生成不同的 spritesheet 版本,适用于 iPad HD、iPad 和 iPhone SD。我主要在 iPad 2 上测试游戏,但我手头没有 iPhone 3GS,所以我偏向于信任模拟器。无论如何,我会在真实设备上尝试一下,如果不能解决,那么我会查看 CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 值是否已设置,然后最后一个我会看看 TexturePacker 是否对我有帮助。完成后我会回复你的。谢谢。
    • 更新:仅供参考:我没有启用该宏。使用 TexturePacker 解决了我的问题。使用 Zwoptex 生成多个分辨率 spritesheets,尤其是较小的比例尺寸 (12.5%),结果证明分辨率不是 POT,TexturePacker 检测到这一点。无论如何,我尝试使用使用 TexturePacker 生成的 NPOT spritesheet,并且没有任何像素出血。我想我会考虑切换到使用这个程序。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多