問題タブ [skcropnode]
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.
swift - SpriteKit で SKCropNode がグレースケール マスク値をレンダリングしない
1 つのことを除いて正常に動作している SKCropNode があります。黒でも白でもないマスク イメージのすべてのグレースケール値が白一色に設定されています。
これは、すべてのグレースケール アルファ値が透明度でレンダリングされているのではなく、完全に不透明に設定されていることを意味します。
これが私のコードです:
グレースケール領域が白に設定されている理由や、目的の結果を達成する方法を知っている人はいますか? 前もって感謝します!
ios - シーン キット オーバーレイで兄弟の順序を無視するSKScene
Scene Kit で overlaySKScene を使用しています。その SKScene では、マスク ノードを使用して SKCropNode を切り取っています。マスク ノードは、Mac OS X で実行すると完全に機能しますが、iOS で実行すると機能しません。
これは、iOS が兄弟の順序を無視しており、マスク ノードが SKCropNode の背後に表示されているためだと思います。設定しようとすると
SKScene では、クラッシュして次のように表示されます。
GameView は SCNView のサブクラスなので、SCNView には "ignoreSiblingOrder" プロパティがないことは理解しています。
これを解決するにはどうすればよいですか?私はこれに間違った方法でアプローチしていますか? iOS で実行した場合の Scene Kit のバグですか?
ios - SpriteKitの「不均一にスケーリングされたテクスチャ」の意味は何ですか?
クラスリファレンスSKCropNode
では、マスクを指定するいくつかの例が示されています。
どうぞ:
これは、切り抜きノードがアートワークから派生した単純なマスクを使用できることを意味しますが、より高度なマスクも使用できます。たとえば、マスクを指定するいくつかの方法を次に示します。
コンテンツをシーンの長方形の部分に制限するテクスチャなしのスプライト。
テクスチャ スプライトは、正確なピクセル単位のマスクです。しかし、不均一にスケーリングされたテクスチャの利点も考慮してください。不均一にスケーリングされたテクスチャを使用して、サイズ変更可能なユーザー インターフェイス要素 (ヘルス バーなど) のマスクを作成し、マスクされた領域を動的コンテンツで埋めることができます。
ノードのコレクションは、フレームがレンダリングされるたびに変化する複雑なマスクを動的に生成できます。
2 番目の例では、不均一にスケーリングされたテクスチャを紹介しています。これはどういう意味ですか?
これは、この 2 番目の例を理解するのに役立ちません!
ios - SKCropNode の問題
これに丸一日費やしました。これは、iOS ドキュメントや SO では見つかりません。
SKShapeNode*
アプリのウィンドウのような があり、 である背景を追加します。背景には、子としてSKSpriteNode
別の 10SKSpriteNode
があります。したがって、ノード ツリーは次のようになります。
SKScene -> window -> background -> (child1, ..., child10)
寸法は、背景がウィンドウのサイズと一致し、背景のすべての子が背景内に収まるようになっています。
ウィンドウ内をクリックしたときにズームしたい (背景と 10 人の子供をすべて一緒にズームする)。背景の xScale と yScale を設定することでこれを実現し、子はこのスケーリングを継承します。しかし、ウィンドウの境界の外にこぼしたくないので、SKCropNode を作成し、その子として背景を追加しました。背景がこぼれなくなりました。
SKScene -> window -> SKCropNode -> background -> (child1, ..., child10)
問題は、ズーム時に背景の子がこぼれることです。これは私にとって直感に反することです。オンラインで検索してドキュメントを調べてみましたが、「SKCropNode はその子とすべての子孫をトリミングしますか?」答えはノーのように見えるので、10 人の子の親すべてをバックグラウンドから SKCropNode に変更することを考えました。
SKScene -> window -> SKCropNode -> (background, child1, ..., child10)
次に、SKCropNode をスケーリングします。これにより、背景とすべての子がスケーリングされますが、再びウィンドウの外にこぼれます。(ゲームの後半で、子の数が 10 から 300 に増える可能性があります。300 のアイテムに対して for ループを実行したくありません。そのため、1 つの親だけにスケールを設定できるようにしたいと考えています。)
私は最終的に、少し「ハッキー」なことを試すことにしました。これはオンラインのどこにも見つからなかったので、「未定義の動作」の領域にいるかどうか疑問に思っています。
SKScene -> window -> SKCropNode1 -> SKCropNode2 -> (background, child1, ..., child10)
元の SKCropNode の上に別の SKCropNode を追加しました。ここでは、SKCropNode2 のみをスケーリングします。これは機能します。しかし、今、私は非常に奇妙な振る舞いをしています。私の SKShapeNode ボタン (完全にウィンドウの外側) は、1 つずつ消えてから戻ってきて、このように循環します。また、右下の「nodes: 10, 60.0 fps」も消えて周期に戻ります。サイクルとは、ウィンドウのズーム内をクリックすることを意味します。SpriteKit でバグに遭遇したようですか? ボタンの zPosition を 20 に設定し、他の何よりも高く設定しました (5 以下)。またskview.ignoresSiblingOrder = false;
、これを達成する方法についてのヘルプやアドバイスに感謝します!
編集:コメントへの返信で、シミュレーターは使用しませんでした。iOS 9.2 を実行している iPad Pro と iPhone 6+ でこれをテストしました。以下は、動作をコンパイルして再現する私のコードです。ズームコードも取り出しましたが、まだ再現可能です。宇宙船(Appleのサンプル画像)を30回程度タップしてみてください。
MainScene.h
MainScene.m
GameViewController.m:
編集 2:SKCropNode
SKCropNode のレイヤーが 1 つだけになるように、ネストされたものを削除しました。宇宙船を数回クリックすると、ボタンのスプライトが消えます。
iphone - SpriteKit SKCropNode は、実際のデバイスの IOS 8.3 ですべて緑色に表示されます。
私は、標準の XCode Swift Game Template でシンプルな SKCropNode を使用しています。エミュレーターではすべて正常に動作しますが、iOS 8.3 を搭載した実際の iPhone 4S では、緑のマスクのみが表示されます (形状は赤ですが)。テクスチャ スプライトは表示されません。面白いことに、iOS 9 を搭載した iPhone 5S でもすべて正常に動作します。問題はiPhone 4SまたはiOS 8.3にあります
これは、デバイスを iOS 9 にアップデートできた問題のスクリーンショットですが、 iOS 8 ユーザーもサポートすることを考えていました。それは修正可能ですか、それとも Apple のバグですか?
再現するコードは次のとおりです。これは、XCode の標準の SpriteKit ゲーム テンプレートに基づいています。
swift - 複数のマスクを SKCropNode に割り当てる
例として、画面上で左に移動してから右に移動する円があります。円が 2 つの特定の正方形 (maskNodes) 内にある場合にのみ円が表示されるようにします。これを実現するために SKCropNode を使用していますが、SKCropNode マスクでは 1 つのマスクしか割り当てることができません。2 つ以上のマスクを SKCropNode に割り当てる方法を知っている人はいますか、それが可能かどうかさえわかりません。ありがとう!