2013-11-02 21 views
5

Ich teste ein Spiel auf der OS X-Version von Sprite Kit, und feststellen, dass einige Texturen ihre Größe falsch melden. Ich frage mich, ob jemand anderes dieses Problem sieht und ob es eine Erklärung dafür gibt?Sprite Kit OS X: SKTextur Größe Eigenschaft ist falsch

Nur um andere Probleme auszuschließen, bevor ich dies als ein Fehler melden. Wenn dies ein bekannter Fehler ist, sagen Sie es bitte.

ich diese Textur bin Laden, ist es 256x256 Pixel groß:

enter image description here

Als ich die SKTexture aus diesem Bild erstellt einzuloggen, dann die SKTexture Beschreibung gibt mir die richtige Größe, sondern die Eigenschaft size nicht, es heißt das Bild ist 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}} 

ich die exakt gleiche Textur laden den gleichen Code auf iOS Simulator und Gerät - Größe Eigenschaft ist immer richtig: 256x256.

Ich habe auch versucht, diese Textur vor allem anderen zu laden, nur um mögliche Nebenwirkungen zu vermeiden. Immer noch ist die Texturgröße falsch.

Es ist erwähnenswert, dass dies nicht bei allen Texturen passiert, aber bei allen 256x256 Texturen, die ich lade. Eine 128 x 256-Textur gibt ihre Größe korrekt an.

Ich habe auch einen sauberen Build, und ich teste auf Mavericks (13A603) mit Xcode 5.0.1 (5A2053).

+0

Ich habe dies als einen Fehler bei Apple gemeldet. Bug ID: 15377856 – LearnCocos2D

+0

Okay, nachdem ich das getan habe, öffnete ich die PNG in Seashore, nur um es noch einmal zu speichern. Danach ist die Size-Eigenschaft korrekt. – LearnCocos2D

Antwort

3

Offenbar dieses Problem durch inkompatible Bildprogramme, in meinem Fall verursacht wird, war Inkscape immer Täter. Die PNG-Dateien, die von Inkscape erstellt wurden, schienen korrekt zu funktionieren, verursachen aber, dass Sprite Kit die Größe falsch meldet. In jedem Fall ist mir das passiert, der Fix war, einfach die PNG-Datei in Seashore zu öffnen, dann "Save As" unter dem gleichen Dateinamen, um das Programm zu zwingen, die PNG-Datei erneut zu speichern.

Ich nehme an, das Öffnen und Speichern mit anderen Bildprogrammen könnte auch funktionieren, vielleicht sogar Vorschau könnte helfen, dieses oder ein Befehlszeilentool wie PNGCrush zu beheben.

Es gibt auch eine gewisse Konsistenz, da die Inkscape-Texturgröße mit 20% weniger angegeben wird, dh 204,8 für eine 256-Textur oder 0,8 für eine 1-Pixel-Textur. Das Problem scheint mit Inkscapes ppi (Pixel pro Zoll) Einstellung zu sein, wo es Werte unter 90 ppi nicht erlaubt. Aber der Standardwert von Photoshop ist 72 ppi, was genau 20% weniger ist. Und ich nehme an, dass das Sprite-Kit das PNG als 72 ppi annimmt, ein 90 ppi-Bild bekommt und somit die PNG-Größe falsch (oder richtig?) Als 20% kleiner berechnet, als es tatsächlich ist.

+0

Schöner Fund. Offensichtlich ist SVG (ala inkscape) 90 dpi, während die meisten anderen Programme 72 dpi verwenden. Ich denke, der zugrunde liegende Täter ist das Verhalten von NSImage vs UIImage, sehr frustrierend. – bw1024

0

Erstellen Sie Textur mit regulären Methoden oder zeigen Sie es tatsächlich auf dem Bildschirm? Ich hatte heute ein ähnliches Problem mit Animationen, und ich denke, das hat etwas mit einem faulen Laden von Texturen zu tun. Sie laden nicht wirklich bis zu dem Zeitpunkt, an dem Sie sie benutzen müssen. Versuchen Sie es mit diesem und Kontrolle Größe:

[tempTexture preloadWithCompletionHandler:^{}]; 

Dies könnte erklären, warum auch die rect 0,0,1,1 ist

+0

Nein, dasselbe Ergebnis.Textur rect ist übrigens richtig, es wird in Faktor ausgedrückt, wo Breite/Höhe von 1 die gesamte Breite/Höhe der Textur bedeutet. – LearnCocos2D