はまだ私のスペースインベーダーのクローンに取り組んで、私は、画面の一番下に破壊拠点を追加したい:私は持っていることによって、私はシールドの外観を変更することができますどのように出て働いてきたテクスチャが連続しなくなるまでスプライトを変形する - 接触を維持する方法 - 検出?
爆弾とシールドがお互いに接触してからdidBegincontactに入ると、爆弾マスクとシールドの現在のテクスチャからSKCropNodeを作成し、ビューのtexture(from: node)
メソッドでレンダーしたテクスチャを取り、シールドのテクスチャを& physicsBodyを新しいテクスチャから更新します。
しかし、シールドのテクスチャがもはや連続していないように、シールドの中心に吹き抜けた穴がある場合(例えば、画像の一番左のシールド)、生成された物理は、テクスチャのしたがって、シールドの右手部分に当たる爆弾は検出されません。
シールドを複数に分割して接触検知機能を維持するにはどうすればよいですか?
考えられる解決策:
- どういうわけか新しいテクスチャをスキャンし、 はどちらか
SKPhysicsbody(bodies: [SKPhysicsBody])
を使用して、単一SKSpriteNodeに割り当てられている複数のphysicsBoiesを作成します。テクスチャの左上から SKPhysicsBodyが生成された場合、 はテクスチャを90度回転させて4回回転させ、4 physicsBodies? (shiled
の破壊された部分が透明であるように)アルファマスキングのいくつかの並べ替えを使用して、
元の形状にシールドのphysicsBodyを維持し、DBCが呼び出されたときに、画素の色をチェック接触点における /爆弾の下に - 彼らは「クリア」している場合は、 何の行動も取らないし、爆弾が
シールドの明確であることを示すと呼ばれる爆弾が
didEndContactまで妨害されないから落下することができます。は爆弾の下のピクセルの色を確認し、その後、爆弾とシールドとの間 シンプル
intersectsRect
を使用する - 明確な場合は、 何もしません。
=========================================== ========
更新:分割されていない場合のスプライトテクスチャの損傷については下記を参照してください。茶色のベースは、最初のダメージを示す元のものです(物理ベースは元のベースを示し、テクスチャはダメを示しています)。
更新:テクスチャが分割されたときに物理学のボディは、以下を参照してくださいグリーンベースは、それが再計算物理学のボディだきました。茶色は元の盾、小さな窪みは「新しい」傷です。 physicsBodyは、画像の左側部分にのみマッピングされます。
シールドテクスチャが変更されるたびに、SKPhysicsBody(テクスチャ)を使用するだけで、新しいテクスチャで新しいボディを与え、正しいボディを形成していない場合は、新しいテクスチャをtempスプライトノードに配置してくださいあなたは何が生成されているかを見ることができます、私はほぼ正の私はそれらの真ん中に穴がある前に体を作成しました。 – Knight0fDragon
@ Knight0fDragon - 何か間違っていない限り動作しません。私の更新を参照してください。 –
私は時間が悪くなったら、何が来るかを見てください。 – Knight0fDragon