6

OS X バージョンの Sprite Kit でゲームをテストしていますが、一部のテクスチャがサイズを正しく報告していないことがわかりました。他の誰かがこの問題を見ているかどうか、またその説明があるかどうか疑問に思っていますか?

これをバグとして報告する前に、他の問題を除外するだけです。これが既知のバグである場合は、その旨をお知らせください。

このテクスチャを読み込んでいます。サイズは 256x256 ピクセルです。

ここに画像の説明を入力

この画像から作成された 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 シミュレーターとデバイスで同じコードを使用してまったく同じテクスチャをロードします。サイズ プロパティは常に正しい: 256x256 です。

また、起こりうる副作用を避けるために、何よりも先にこのテクスチャをロードしようとしました。まだテクスチャのサイズが間違っています。

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

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

4

3 に答える 3

3

どうやらこの問題は、互換性のない画像プログラムが原因のようです。私の場合、Inkscape が常に原因でした。

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

他の画像プログラムで開いて保存することもできると思います。おそらく Preview でさえ、これや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% 小さいと誤って (または正しく?) 計算していると思います。

于 2015-04-20T19:19:30.607 に答える
0

通常の方法でテクスチャを作成しますか、それとも実際に画面に表示しますか? 今日のアニメーションでも同様の問題がありましたが、これはテクスチャのレイジー ラディングに関係していると思います。それらは、使用する必要がある時まで実際にはロードされません。これを使用してサイズを確認してみてください:

    [tempTexture preloadWithCompletionHandler:^{}];

これは、rect が 0,0,1,1 である理由も説明するかもしれません

于 2013-11-02T19:45:22.240 に答える