問題タブ [skphysicscontact]

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.

0 投票する
0 に答える
51 参照

sprite-kit - spritKit でボディ間の接触の直前にアニメーションを停止する方法はありますか?

2 つのボディが高速で接触する SpriteKit アニメーションがあります。残念ながら、didBeginContact メソッドを使用すると、アニメーションを停止したときに、2 つのボディがすでに少し重なっています。willBeginContact メソッドのように、接触が発生する前にアニメーションを停止したいと考えています。方法はありますか?ありがとう。

0 投票する
2 に答える
196 参照

swift - SpriteKit の didBeginContact を呼び出せない

シンプルなシーンでテストしました。

FuncdidBeginContactを呼び出すことができません。

と を使ってみましcollisionBitMasks1.physicsBody = SKPhysicsBody(circleOfRadius: 100)。問題は解決しませんでした。

修正するにはどうすればよいですか?

0 投票する
0 に答える
89 参照

ios - SKPhysicsContact.CollisionImpulse 値が一貫していないようです

プレーヤーが船をナビゲートし (SKSpriteNode A)、ゆっくりと回転している静止した長方形のスプライト (SKSpriteNode B) と接触しようとするゲームを作成しています。彼らはインパルスを介して船を操縦し、加速、減速、方向転換などを行うことができます。接触が発生したら、SKPhysicsContact オブジェクトの「CollisionImpulse」プロパティを使用して、衝突が激しすぎたかどうかを判断します。両方のオブジェクトの質量は同じです。問題は、テスト中に一貫性のない結果が得られることです。毎回一見同じ速度でオブジェクトと衝突し、非常に異なる CollisionImpulse 値 (10 前後の場合もあれば 30 前後の場合もあります) を取得します。

オブジェクト A は (回転しているにもかかわらず) 静止しており、オブジェクト B のみが移動しているため、衝突時のオブジェクト B の速度のみに基づいて CollisionImpulse 値が決まると推測されますが、そうではないようです。

オブジェクト A の回転は CollisionImpulse に影響しますか? 私が見逃している CollisionImpulse 値に影響を与える可能性のあるものは他にありますか?

0 投票する
3 に答える
264 参照

ios - Spritekit-DidBeginContact が呼び出されていない

この問題は多くの人に発生していることに気付きました。didMove 関数に があることを確認しましたがself.physicsWorld.contactDelegate = self 、それでも機能しません。これが私のコードです:

0 投票する
2 に答える
133 参照

sprite-kit - SpriteKit の物理接点

この単純な状況でビットマスキングがどのように機能するかを説明することは可能ですか?

どういうわけか、これはそれらの間でオフになっているため、それらの間に衝突はありません。衝突マスクを 32 ビット全体で 00 に設定していると思いますが、それは別の質問にしましょう。これらをオフにする方法はまだわかりません。

各ボールに固有のコンタクト ビット マスクを設定したら、ボールがコンタクトしたときにコンタクト情報を提供するにはどうすればよいでしょうか?

どの 2 つのボールが互いに接触したかを知るにはどうすればよいでしょうか?

特定のコンタクトで最大のボールだけがコンタクト情報を受信することは可能ですか?


アップデート:

私は必ずしもコードを求めているわけではありません。何が何で、どのように機能し、なぜ何が何をするのかを説明するコードが必要な場合は、コードを使用してください。

しかし、私が本当に求めているのは、ビットマスキングがどのように機能して、接触に「誰」が関与したかを判断できるロジックを提供する方法を理解することです。

ボールのサイズごとに異なるビットマスクを指定した理由は、2 つのボール間の特定の接触において、より大きなボールを決定するのに役立つと考えたからです。しかし、私はこれについて間違っている可能性があります。

更新 2:

進行中のプロセスの理解:

私が理解しているように、これらはプロセスの一部です。

  1. SKView をサブクラス化した SKScene を、物理ワールドの連絡先通知デリゲートに準拠するものとして登録します。それもそうだと言う。

  2. シミュレーションで知りたい、および/または制御したい身体的相互作用タイプの欲求の各タイプのカテゴリとしてビットマスクを設定します

  3. これらのビットマスクを使用して、それらを適切に適用することにより、接触や衝突の一部にすることが望まれる各オブジェクトの性質を明確にします (ここでは魔法のような意思決定が行われます)。

  4. デリゲートとして登録された同じ SKView サブクラスで、何かを行うコードで連絡先コールバックをオーバーライドします

  5. 誰/何が誰に連絡したかを判断する魔法のコードを作成します。


私はこれらのいくつかを理解していますが、連絡先ビットマスクの設定とカテゴリビットマスクの命名の理由の違いは理解していません。また、誰が誰に連絡したかを判断する方法も理解していません。

0 投票する
1 に答える
96 参照

swift - SpriteKit didEndContact が呼び出されていない

私のdidEndContact:方法では、「currentScore」をインクリメントします。

何らかの理由でdidEndContact:が呼び出されていないため、「currentScore」がインクリメントされていません。これをデバッグするためになぜ、または何を探す必要があるのでしょうか?

関連するコードは次のとおりです。他にも役立つ詳細を追加できるかどうか教えてください。

0 投票する
0 に答える
120 参照

swift - SpriteKit & Swift 3 - バウンスがボール ノードで正しく機能しない

私は本質的にボールといくつかのターゲットとパドルを持つゲームを作りました。ただし、最小速度を下回ったり、最大速度を超えたりしない限り、ボールが衝突するターゲットに応じて、速度が3倍、2倍、または半分になるようにする必要がありました。

これを行うために、didBegin(contact) 関数を一緒に使用し、以下のコードでわかるように異なる速度を設定しました。

私の問題は、ボールがターゲットに衝突したときに、非常に奇妙で非現実的な方法で跳ね返ったり、本質的にグリッチアウトしたりすることがあります(私が意味することを示す短いビデオクリップについては、以下のリンクを確認してください)

注: ビデオの 2/3 秒で奇妙なバウンスが発生している例です。

https://drive.google.com/open?id=0BxgQmn_JruJ_aUU2dVBoVlprV0k

なぜこれが起こっているのですか? さらに重要なことに、どうすれば修正できますか?

PS:これを引き起こしていると思われる1つの提案は、速度のベクトルがボールの角度(方向)と速度(私が思う)の両方を制御するため、速度を設定するときに方向が考慮されないという事実です。これが原因である場合、バウンスをリアルにしながら、速度を 3 倍/2 倍/半分にすることは可能でしょうか?