2013-11-02 72 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