Sprite Kit OS X:SKTexture size属性不正确

Lea*_*s2D 5 size macos sprite-kit osx-mavericks sktexture

我正在测试OS X版本的Sprite Kit上的游戏,并发现一些纹理不正确地报告它们的大小.我想知道是否有其他人看到这个问题以及是否有解释?

在我将此报告为错误之前,只是为了排除任何其他问题.如果这是一个已知错误,请说出来.

我正在加载这个纹理,它的大小是256x256像素:

在此输入图像描述

当我记录从这个图像创建的SKTexture时,SKTexture描述给了我正确的大小,但size属性没有,它说图像是204.8 x 204.8.

tex = <SKTexture> 'Tileset_GeometryB.png' (256 x 256)
tex.size = {204.80000000000001, 204.80000000000001}  // Huh? WTF?!?
tex.textureRect = {{0, 0}, {1, 1}}
Run Code Online (Sandbox Code Playgroud)

我在iOS模拟器和设备上使用相同的代码加载完全相同的纹理 - 大小属性始终是正确的:256x256.

我还尝试在其他任何事情之前加载此纹理,以避免任何可能的副作用.纹理大小仍然是错误的.

值得注意的是,所有纹理都不会发生这种情况,但是在我加载的所有256x256纹理上都会发生这种情况.128x256纹理正确报告其大小.

我也做了一个干净的构建,我正在使用Xcode 5.0.1(5A2053)测试Mavericks(13A603).

Lea*_*s2D 3

显然这个问题是由不兼容的图像程序引起的,在我的例子中,Inkscape 总是罪魁祸首。

Inkscape 创建的 PNG 文件似乎可以正常工作,但会导致 Sprite Kit 错误地报告大小。在每次发生这种情况的情况下,修复方法只是在Seashore中打开 PNG 文件,然后在相同的文件名下“另存为”以强制程序重新保存 PNG 文件。

我认为使用其他图像程序打开和保存也可能有效,甚至预览可能有助于解决此问题或像PNGCrush这样的命令行工具。

还有一定的一致性,因为 Inkscape 纹理大小据报告减少了 20%,即 256 纹理为 204.8,或 1 像素纹理为 0.8。问题似乎出在 Inkscape 的 ppi(每英寸像素)设置上,它不允许值低于 90 ppi。但 Photoshop 的默认值为 72 ppi,正好减少了 20%。我认为 Sprite Kit 假设 PNG 为 72 ppi,获得 90 ppi 图像,因此错误地(或正确地?)计算出 PNG 的大小比实际大小小 20%。