Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
688 views
in Technique[技术] by (71.8m points)

macos - Sprite Kit OS X: SKTexture size property is incorrect

I'm testing a game on the OS X version of Sprite Kit, and find that some textures report their size incorrectly. I'm wondering if anyone else is seeing this problem and whether there is an explanation for it?

Just to rule out any other issues before I report this as a bug. If this is a known bug, please say so.

I'm loading this texture, it is 256x256 pixels in size:

enter image description here

When I log the SKTexture created from this image, then the SKTexture description gives me the correct size but the size property does not, it says the image is 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}}

I load the exact same texture using the same code on iOS Simulator and device - size property is always correct: 256x256.

I also tried loading this texture before anything else just to avoid any possible side effects. Still the texture size is wrong.

It is worth noting that this doesn't happen with all textures, but does happen on all 256x256 textures I load. A 128x256 texture reports its size correctly.

I also did a clean build, and I'm testing on Mavericks (13A603) with Xcode 5.0.1 (5A2053).

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Apparently this issue is caused by incompatible image programs, in my case Inkscape was always the culprit.

The PNG files created by Inkscape appeared to work correctly but cause Sprite Kit to report the size incorrectly. In every instance this happened to me, the fix was simply to open the PNG file in Seashore, then "Save As" under the same filename to force the program to re-save the PNG file.

I assume opening and saving with other image programs might work as well, perhaps even Preview might help to fix this or a command line tool like PNGCrush.

There's also a certain consistency because Inkscape texture size is reported as 20% less, ie 204.8 for a 256 texture, or 0.8 for a 1-pixel texture. The problem seems to be with Inkscape's ppi (pixels per inch) setting, where it does not allow values below 90 ppi. But Photoshop's default is 72 ppi which is exactly 20% less. And I take it that Sprite Kit assumes the PNG to be 72 ppi, gets a 90 ppi image, and thus incorrectly (or correctly?) calculates the PNG's size as 20% less than what it actually is.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...