ios - 如何防止在较旧的 iOS 设备上渲染使用 Zwoptex 生成的 sprite-sheet 时出现像素渗色?

标签 ios cocos2d-x sprite-sheet zwoptex

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

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

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

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

所以我想知道如何防止从 iPhone 到 iPad(包括视网膜)的所有 iOS 设备发生像素渗色问题的解决方案。 如果知道为 Sprite 之间的“间距像素”选择特定值以在渲染时消除问题的任何最佳实践或实用解决方案,那就太好了。

最佳答案

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

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

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

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

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

关于ios - 如何防止在较旧的 iOS 设备上渲染使用 Zwoptex 生成的 sprite-sheet 时出现像素渗色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023158/

相关文章:

ios - 在 IOS 中实现免责声明屏幕的策略

c++ - Cocos2d-x 4.0 Lens3D和Waves3D动画

css - 如何使用 Google Material Design Sprite 图标..?

android - AndEngine如何从SD卡加载spritesheet

javascript - svg + Sprite 表 + d3 + clipPath + 位置 + 大小

ios - GameCenter 报告 Swift 3 成就

ios - 评估类的方法或属性

android - COCOS-2d-x : Idea to implement Level progress in games

c++ - stringstream << 运算符在循环中消耗大量内存

ios - Swift 中的 UIAlert 会自动消失吗?