2013-11-02 3 views
5

Я тестирую игру в версии OS X версии Sprite Kit и обнаруживаю, что некоторые текстуры сообщают об их размере неправильно. Мне интересно, видит ли кто-нибудь еще эту проблему и есть ли объяснение?Sprite Kit OS X: свойство свойства SKTexture неверно

Просто, чтобы исключить любые другие проблемы, прежде чем сообщать об этом как об ошибке. Если это известная ошибка, скажите об этом.

я загружаю эту текстуру, это 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 Simulator и устройства - размер имущества всегда правильно: 256x256.

Я также попытался загрузить эту текстуру перед чем-либо еще, чтобы избежать возможных побочных эффектов. Тем не менее размер текстуры неправильный.

Стоит отметить, что этого не происходит со всеми текстурами, но это происходит во всех загружаемых текстурах 256x256. Текстура 128x256 сообщает о его размере.

Я также сделал чистую сборку, и я тестирую Mavericks (13A603) с Xcode 5.0.1 (5A2053).

+0

Я сообщил об этом как об ошибке для Apple. Идентификатор ошибок: 15377856 – LearnCocos2D

+0

Хорошо, как только я сделал это, я открыл PNG на побережье, чтобы снова сохранить его. После этого свойство размера является правильным. – LearnCocos2D

ответ

3

Видимо, проблема вызвана несовместимостью программ изображения, в моем случае Inkscape всегда был виновник.

PNG-файлы, созданные Inkscape, оказались работоспособными, но Sprite Kit сообщил об ошибке. В каждом случае это случилось со мной, исправление было просто открыть PNG-файл в Seashore, а затем «Сохранить как» под тем же именем файла, чтобы заставить программу повторно сохранить файл PNG.

Я предполагаю, что открытие и сохранение с другими программами изображений также могут работать, возможно, даже Preview может помочь исправить это или инструмент командной строки, например PNGCrush.

Существует также определенная согласованность, поскольку размер текстуры Inkscape сообщается на 20% меньше, то есть 204,8 для 256 текстур, или 0,8 для текстуры с 1 пикселем. Проблема, похоже, связана с настройкой Inkscape ppi (пикселей на дюйм), где она не допускает значений ниже 90 ppi. Но по умолчанию Photoshop - 72 ppi, что на 20% меньше. И я полагаю, что Sprite Kit предполагает, что PNG составляет 72 ppi, получает изображение в 90 ppi и, следовательно, неправильно (или правильно?) Вычисляет размер PNG на 20% меньше, чем на самом деле.

+0

Приятная находка. По-видимому, SVG (ala inkscape) составляет 90 точек на дюйм, тогда как в большинстве других программ используется 72 dpi. Я считаю, что основным виновником является поведение NSImage против UIImage, очень расстраивающее. – bw1024

0

Вы создаете текстуру с помощью обычных методов или фактически показываете ее на экране? Сегодня у меня была аналогичная проблема с анимацией, и я думаю, что это связано с ленивой посылкой текстур. Они фактически не загружаются до тех пор, пока вы не будете использовать их. Попробуйте использовать это и проверять размер:

[tempTexture preloadWithCompletionHandler:^{}]; 

Это также может объяснить, почему Прямоугольник является 0,0,1,1

+0

Нет, такой же результат.Прямая текстура верна кстати, она выражается в коэффициенте, где ширина/высота 1 означает всю ширину/высоту текстуры. – LearnCocos2D