SKPhysicsContactDelegate 衝突検出で発生している問題を修正しようとしています。ノードAとノードBの2つのノードがあり、ノードAは画面上で静止していますが、ノードBはユーザーの指で画面上をドラッグできます。nodeA は、nodeB がオーバーラップしているかどうかを検出できる必要があります。didBeginContact メソッドと didEndContact メソッドが複数回呼び出されていますが、これは調査の結果、予想される動作であることがわかりました。この問題を回避するには、整数変数を 0 に設定し、連絡先があるたびに増分し、連絡先が終了するたびに減分します。値が 0 より大きい場合、2 つのノードはオーバーラップしており、値が 0 に等しい場合はオーバーラップしていません。これは、ユーザーが nodeB を nodeA にドラッグする速度が速すぎるまで問題なく動作します。これが発生すると、連絡方法が常に正しい回数呼び出されるとは限りません。たとえば、3 つの接触が検出されても、端部接触が 2 つしか検出されない (またはまったく存在しない) 場合があります。この場合、プログラムは、2 つの節点が重なり合っていなくても重なり合っていると見なします。プログラムが更新できるよりも速くユーザーがノードをドラッグしているため、これが発生していると想定しています。これを回避するためにできることはありますか? 基本的に、2 つのノードがいつ重なって、いつ重ならないかを正確に知る必要があるだけです。また、ノードが凸形状であることにも注意してください。以下は私の連絡方法です:プログラムが更新できるよりも速くユーザーがノードをドラッグしているため、これが発生していると想定しています。これを回避するためにできることはありますか? 基本的に、2 つのノードがいつ重なって、いつ重ならないかを正確に知る必要があるだけです。また、ノードが凸形状であることにも注意してください。以下は私の連絡方法です:プログラムが更新できるよりも速くユーザーがノードをドラッグしているため、これが発生していると想定しています。これを回避するためにできることはありますか? 基本的に、2 つのノードがいつ重なって、いつ重ならないかを正確に知る必要があるだけです。また、ノードが凸形状であることにも注意してください。以下は私の連絡方法です:
func didBeginContact(contact: SKPhysicsContact)
{
let contactMask = contact.bodyA.categoryBitMask + contact.bodyB.categoryBitMask
if contactMask == 3
{
startContact++
timerStart = true
}
}
func didEndContact(contact: SKPhysicsContact)
{
let contactMask = contact.bodyA.categoryBitMask + contact.bodyB.categoryBitMask
if contactMask == 3
{
startContact--
if startContact == 0
{
timerStart = false
}
}
}