問題タブ [sktextureatlas]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - スプライト キットの SKTexture アニメーションの高さが予期せず変更される
SKTextureAtlas
をアニメーション化するために を使用していSKSpriteNode
ます。アニメーションは機能しますが、何らかの理由でスプライトの高さがアニメーションで何度も変化しているため、奇妙に見えます。これにより、y 位置も変化します。高さと y を除いて、他のすべては同じままです。私が考えることができる唯一のことは、各フレーム内に異なる量の透明ピクセルがあることです。ただし、各画像は同じサイズです。SKAction.animateWithTextures(atlasFrames, timePerFrame: 0.1, resize: true, restore: false)
resize を true と false に設定してを使用しても、問題は解決しません。
swift - SKAction シーケンスでノードのテクスチャ アトラスを変更する方法は?
SKAction
このシーケンスを使用して、画面の左側から右側に繰り返し前後に移動するノードがある SpriteKit でゲームを作成しています。
ノードは でSKTexture
、WalkRight というアトラスを使用しています。私がやろうとしているのSKAction.moveByX(-frame.size.width/2.8, y: 0, duration: NSTimeInterval(4)
は、実行時にノードのテクスチャを、私が WalkLeft と呼んだ別のアトラスに変更したいということです。ノードのテクスチャを変更できるアクションをシーケンスで実行する方法がわかりません。
テクスチャを追加するためのコード:
ios - 実行時に SpriteKit テクスチャ アトラスを作成できますか
SKLabelNodeを使用してクロスワード文字をSKNodeサブクラスの子として表示する os x/iOS クロスワード ゲームを開発しています。
したがって、各文字にはSKNode.SKLabelNodeがあります。SKLabelNodeを使用しない場合、描画カウントは 6 ~ 8 の範囲になります。SKLabelNodeを使用すると、シーン内の子の数がほぼ 100 になります。
私は現在、それを回避する方法を探しており、SKLabelNodeをテクスチャにラスタライズするというアイデアを思いつきましたが、まだ多くの異なるテクスチャがあるため、これは描画カウントを下げません。
私のアイデアは、これらのSKNodeサブクラスをラスタライズし、テクスチャをテクスチャ アトラスに入れることです。
質問は、実行時にテクスチャ アトラスを作成することは可能ですか? 単一のテクスチャが変更された場合はどうすればよいですか? アトラスで単一のテクスチャを交換することは可能ですか、それとも再構築する必要がありますか?
そして、多くの異なる SKLabelNodes を処理するための「最良の方法」があるかもしれません!?
swift - ディクショナリから作成された SKTextureAtlas にテクスチャ サイズを変更させないようにする方法は?
私のプロジェクトでは、テクスチャはPaintCode ( paint-code )によって提供されるメソッドから手続き的に生成されます。
次に、これらのメソッドによって生成されSKTextureAtlas
た辞書ファイルから を作成します。UIImage
myAtlas = SKTextureAtlas(dictionary: myTextures)
最後に、次を使用してアトラスからテクスチャを取得します。
textureNamed
var sprite1 = SKSpriteNode(texture:myAtlas.textureNamed("texture1"))
ただし、iPhone4S シミュレーターでは表示されるノードのサイズが 2 倍になります。そして、iPhone 6 Plus シミュレーターでは 3 倍の大きさになります。
初期化時に、アトラスはデバイスの解像度で画像を計算しているようです。ただし、生成された画像は既に正しいサイズになっているため、変更する必要はありません。以下の描画方法を参照してください。
生成された画像の説明は次のとおりです。
<UIImage: 0x7f86cae56cd0>, {52, 52}
アトラスの対応するテクスチャの説明:
<SKTexture> 'image1' (156 x 156)
これは iPhone 6 Plus 用で、@3x 画像を使用しているため、サイズが x3 になっています。
また、iPhone 4S の場合、@2x 画像を使用すると、予想どおり:
<UIImage: 0x7d55dde0>, {52, 52}
<SKTexture> 'image1' (156 x 156)
最後に、scale
generated のプロパティUIImage
が適切なデバイス解像度に設定されます: @2x (iPhone 4S) の場合は 2.0、@3x (iPhone 6 Plus) の場合は 3.0 です。
質問
では、アトラスが写真のサイズを変更しないようにするにはどうすればよいですか?
描画方法
PaintCode は、次のような描画メソッドを生成します。
更新 1
生成する 2 つのアプローチの比較SKTextureAtlas
初期化ではノードのサイズを正しく設定するためにscaleプロパティを使用しないため、問題はSKTextureAtlas
辞書にあるようです。SKSpriteNode
UIImage
コンソールでの説明は次のとおりです: - texture1: '' (84 x 84) - texture2: 'texture1' (84 x 84)
texture2
一部を欠場data
!これは、次のようにノードを適切にサイズ設定するためのスケール情報が不足していることを説明できます。
ノードのサイズ = テクスチャのサイズをテクスチャのスケールで割ります。
更新 2
この問題は、のスケール プロパティがUIImage
1 と異なる場合に発生します。
したがって、次の方法を使用して画像を生成できます。
ios - メモリから SKTextureAtlas を解放する
テクスチャ アトラスを解放するのに問題があります。現在、プレイヤーがキャラクターを変更できる SpriteKit ゲームがあります。現在、グローバル共有インスタンスにアトラスがあります。
変更できる各キャラクターには、独自のテクスチャ アトラスがあります。次のようなメソッドを使用して、そのキャラクター アトラスからプレイヤーの動き、アイドル、およびジャンプのアニメーションをフェッチします。
そして、それはプレーヤー スプライト ノード クラスの配列インスタンス変数に格納されます。キャラクターが変更されるたびに、これらのフレームは新しいフレームに置き換えられるので、古いフレームは正しく解放されるべきですか?
また、プレイヤーがキャラクターを切り替えるときは、これを使用してテクスチャ アトラスをプリロードします。
SpriteKit が以前のキャラクター アニメーションからメモリを解放しないのはなぜですか? プレーヤーが新しいキャラクターに切り替えると、メモリが絶えず増加し、アプリがクラッシュします。そのセッションですでに選択されているキャラクターを再度選択した場合、メモリは増加しません。これは、メモリ リークを示しています。キャラクターのアニメーションは解放されていません。なんで?
SpriteKit がこのようなことを自分で処理することになっていることを理解しています。そのため、混乱しています。テクスチャ アトラスを自分で手動で解放する方法は絶対にありませんか?
ありがとう!
sprite-kit - SKSpriteNode ライティングが SKTextureAtlas のテクスチャで機能しない
SpriteKit (OS X 10.11 ベータ版で Xcode 7 ベータ版と Xcode 6.4 を試した) で問題が発生しました。個別に使用すると機能する画像と法線ファイルから SKTextureAtlas を作成すると、法線マップ ライティングが機能しなくなります。次の例を参照してください。
左から右へ:
- テクスチャ + 法線 + 照明 (アトラスのテクスチャ) を持つスプライト
- テクスチャ + 通常のスプライト (アトラスのテクスチャ)
- テクスチャ付きスプライト (アトラスのテクスチャ)
- 通常のテクスチャのスプライト (アトラスのテクスチャ)
- テクスチャ + 法線 + 照明 (imageNamed: を介して個々のファイルから作成されたテクスチャ) を持つスプライト
アトラスは実行時に SKTextureAtlas atlasWithDictionary: で作成され、次のテクスチャが含まれています。
注: Xcode でアトラスを作成し、atlasNamed を介してロードすると、まったく同じ問題が発生します。つまり、アトラスを作成する方法や時期に問題があることは間違いありませんが、テクスチャは最初にアトラスから取得されるためです。場所。
個々のファイルでスプライトを作成すると、照明が機能します (右端の画像):
アトラス ファイルでまったく同じことを行います。上のスクリーンショットは、アトラスからテクスチャとしてスプライト テクスチャと法線の正しい画像 (左から 3 番目と 4 番目) が得られることを証明しています。それでも、結果は左から 1 番目の画像で、法線マッピングのない、照らされたスプライトです。
通常のテクスチャには、SKTextureAtlas が適用されない形式の後処理が必要なのだろうか? それとも、アトラスの通常のテクスチャで問題が発生した人はいますか?
それとも、これはバグでしょうか?
更新:次のコードを使用して、新しい SpriteKit アプリ (OS X、ここからダウンロードして自分で試してください) でこの動作を再現しました。
swift - Atlas が @3x 画像をロードしない
iphone6 plus のシミュレーターを使用する場合、アトラスから読み込まれる画像は、@3x~iphone ではなく @2x~iphone に読み込まれます。(アトラスを使用せずに) 画像を読み込むと、@3x~iphone が機能します。
@2x~iphone と @3x~iphone の両方の画像を含む 1 つのアトラスを使用しています (@2x~iphone の画像のみを読み込みます)。atlas フォルダー名を @2x.atlas および @3x.atlas に変更するためにオンラインで読みましたが、フォルダーが見つからないというエラーが表示されます。また、ファイル名を @2x~iphone.atlas と @3x~iphone.atlas に変更しましたが、同じエラーが発生しました。
これは、画像を配列にロードするために使用するものです。
私の画像名は「画像名」@2x~iphone.png と「画像名」@3x~iphone.png です。フォルダー名は Segments.atlas です。
@3x~iphone の画像がロードされない理由を誰か教えてもらえますか?