2013-11-02 95 views
5

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

只是为了排除任何其他问题,然后我报告这是一个错误。如果这是一个已知的错误,请这么说。

我加载这个纹理,它是256×256像素大小:

enter image description here

当我登录时从该映像创建的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}} 

我加载使用iOS上的模拟器和设备相同的代码完全一样的质感 - 大小属性始终是正确的:256×256。

我也尝试过在其他任何东西之前加载此纹理,以避免任何可能的副作用。纹理尺寸仍然是错误的。

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

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

+0

我将此报告为Apple的一个错误。错误ID:15377856 – LearnCocos2D

+0

好吧,我刚刚做完之后,我在海滨打开了PNG,只是为了再次保存它。之后,尺寸属性是正确的。 – LearnCocos2D

回答

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%。

+0

很好找。显然,SVG(ala inkscape)是90 dpi,而其他大多数程序使用72 dpi。我认为潜在的罪魁祸首是NSImage与UIImage的行为,非常令人沮丧。 – bw1024

0

您是否使用常规方法创建纹理或实际将其显示在屏幕上?我今天有类似的动画问题,我认为这与纹理的懒惰提示有关。他们实际上并没有加载,直到你必须使用它们。尝试使用此和检查大小:

[tempTexture preloadWithCompletionHandler:^{}]; 

这也可以解释为什么在矩形是0,0,1,1

+0

不,结果相同。纹理矩形是正确的顺便说一句,它表示的因素其中宽度/高度1意味着整个纹理的宽度/高度。 – LearnCocos2D