2013-11-02 11 views
5

OS X版のSprite Kitでゲームをテストしていて、テクスチャのサイズが正しく表示されないことがあります。他の誰かがこの問題を眺めているのかどうか、またその説明があるのか​​どうか疑問に思っていますか?スプライトキットOS X:SKTextureサイズのプロパティが正しくありません

これをバグとして報告する前に、他の問題を除外してください。これが既知のバグならば、そう言いなさい。私はこのテクスチャをロードしています

は、それは、サイズが256×256ピクセルです:私はこの画像から作成SKTextureをログインすると、その後、SKTextureの説明は私に正しいサイズが、sizeプロパティを与える

enter image description here

そうではない、それは画像が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シミュレータで同じコードを使用して正確に同じテクスチャを読み込み、デバイスサイズのプロパティは常に正しい:256x256です。

私はまた、可能性のある副作用を避けるために、何よりも先にこのテクスチャを読み込もうとしました。それでもテクスチャのサイズは間違っています。

これはすべてのテクスチャで起こるわけではありませんが、ロードするすべての256x256テクスチャで発生します。 128x256テクスチャは、サイズを正しく報告します。

私もクリーンなビルドを行いましたが、Xcode 5.0.1(5A2053)のMavericks(13A603)でテストしています。

+0

私はこれをAppleにバグとして報告しました。 Bug ID:15377856 – LearnCocos2D

+0

私はそれをやった直後に、もう一度それを保存するためにPashをSeashoreに開きました。その後、sizeプロパティは正しいです。 – LearnCocos2D

答えて

3

どうやらこの問題は、互換性のない画像プログラムによって引き起こされている理由は、また、私の場合にはInkscapeのは常にだった、説明するかもしれません犯人

Inkscapeで作成されたPNGファイルは正しく動作するように見えましたが、Sprite Kitはサイズを正しく報告しませんでした。すべての場合、これは私にとって起こりました。修正は単にSeashoreのPNGファイルを開き、同じファイル名で "名前を付けて保存"して、プログラムに強制的にPNGファイルを保存させるというものでした。

他の画像プログラムでも開くことができますが、プレビューでもこれを修正したり、PNGCrushなどのコマンドラインツールを修正したりすることができます。

Inkscapeのテクスチャサイズが20%少ない、つまり256テクスチャの場合は204.8、1ピクセルテクスチャの場合は0.8と報告されているため、一定の整合性もあります。この問題は、Inkscapeのppi(pixels per inch)設定のように見えますが、90 ppi以下の値は許可されません。しかし、Photoshopのデフォルトは72ppiで、正確に20%少なくなっています。 Sprite Kitは、PNGを72ppiと仮定し、90ppiの画像を取得するため、PNGのサイズが実際のサイズよりも20%少ないと誤って(または正しく)計算されます。

+0

ニースが見つかりました。どうやらSVG(ala inkscape)は90 dpiですが、他のほとんどのプログラムでは72 dpiです。私は根本的な原因がNSImage対UIImageの動作であり、非常にイライラしていると思う。 – bw1024

0

通常の方法でテクスチャを作成するのですか、実際に画面に表示しますか?私は今日のアニメーションで同様の問題を抱えていましたが、これはテクスチャの遅延レイジングと関係があると思います。実際に使用するまではロードされません。これを使用してサイズをチェックしてみてください。

[tempTexture preloadWithCompletionHandler:^{}]; 

RECTは0,0,1,1

+0

いいえ、同じ結果です。テクスチャ矩形は正しいbtwです。幅/高さ1はテクスチャの幅/高さ全体を意味するfactorで表されます。 – LearnCocos2D

関連する問題