2017-08-21 1 views
2

Ich habe mit dem Sprite-Kit-Spiel in iOS begonnen und möchte herausfinden, wie ich feststellen kann, ob es zu einer Kollision gekommen ist, als der Ball in den Reifen kam. enter image description hereErkenne, ob zwischen 2 Objekten eine Kollision aufgetreten ist

Um die Dinge leichter zu verstehen. An meinem Basketballkorb habe ich 2 Ecken (sie sind rot und leicht zu sehen, sie stehen hervor), sie haben eine Kollision mit ihnen und wenn der Ball sie trifft, wird sie gekippt.

Meine Frage: Ich möchte bemerkt werden, wenn der Ball eine der Ecken trifft oder wenn der Ball in den Ring eindringt, ohne eine der beiden Ecken zu treffen. (Wie eine Art und Weise normal zu punkten unterscheiden perfekt wirft wirft)

AKTUALISIERT:

Wie stelle ich eine Fahne, um die Ecken? Können Sie auf die Funktionen hinweisen, die ich verwenden muss?

Ich habe einen Knoten, der mich benachrichtigt, wenn der Ball in den Reifen, es ist die Stahlstange in der Mitte des Reifens, wenn es kollidiert, fügt es meine Punktzahl.

func didBegin(_ contact: SKPhysicsContact) 
    { 
     // check for the ball contacting the scoreZone (scoreZone is the steel bar) 
     guard let ballBody = ball.physicsBody, let scoreBody = score_zone.physicsBody else { 
      return 
     } 
     // it doesn't matter who touches who, so just use array "contains" to handle both cases 
     let bodies = [contact.bodyA, contact.bodyB] 
     if bodies.contains(ballBody) && bodies.contains(scoreBody) && should_detect_score { 
      // add score 
      add_score() 
     } 
    } 
+0

Können Sie Ihren aktuellen Kollisionserkennungscode posten? – nathan

Antwort

1

hier ist ein Code zum Anlegen und Erfassen von Kollision das, was ich benutze und sehr effektiv

-SWIFT 3-

enum bodyType: UIInt32 { 
    case redDot1 = 1 
    case redDot2 = 2 
    case ball = 3 
} 
//do this to properly set up the physicsBodies of your detection otherwise the detection will not work at all 
yourBall.physicsBody = SKPhysicsBody(circleOfRadius: CGFloat(x: ball.size.width, y: ball.size.height) 
yourBall.physicsBody?.categoryBitMask = bodyType.ball.rawValue 
yourBall.physicsBody?.collisionBitMask = bodyType.redDot1.rawValue | bodyType.redDot2.rawValue 

//repeat these steps for redDot1 and redDot2 and then put this in someplace (doesn't matter where) 


func didBegin(_ contact: SKPhysicsContact) { 
    if contact.bodyA.categoryBitMask = bodyType.ball.rawValue && contact.bodyB.categoryBitMask = bodyType.redDot1.rawValue || contact.bodyB.categoryBitMask = bodyType.ball.rawValue && contact.bodyA.categoryBitMask = bodyType.redDot1.rawValue { 
    //in here is where you will put the notification 
    } 
if contact.bodyA.categoryBitMask = bodyType.ball.rawValue && contact.bodyB.categoryBitMask = bodyType.redDot2.rawValue || contact.bodyB.categoryBitMask = bodyType.ball.rawValue && contact.bodyA.categoryBitMask = bodyType.redDot2.rawValue { 
    //in here is where you will put the notification 
    } 
} 

einige Erklärungen

so zu sein scheint, wenn Du siehst, wo ich erklärt habe, dass dein Ball einen Physik-Körper hat. Es heißt KategorieBitMask = BlahBlah, was bedeutet, dass du dem Code sagst, dass dein Ball eine eindeutige Ganzzahl hat, die nicht existiert uishes es zur Kollisionserkennung

und dann sagt es collisionBitMask, dass Ihr telling SpriteKit genau bedeutet, was Sie, dass Ball mit

und unten kontaktieren wollen, ist die Funktion der Physik-Handler es machen kann, so dass Sie sagen können, genau das, was Kontakte, was und wann es passiert, und ermöglicht es Ihnen, in Sachen zu setzen, die passieren, wenn der Kontakt genannt wird (ein Heads-up wie geben)

empfehle ich Ihnen mehr darüber zu lesen und Äpfel Dokumentation auf SKPhysicsBodies

studieren

Wenn Sie weitere Probleme haben, lassen Sie mich bitte als ich wissen möchten gerne mehr mit diesem Zeug nur

und wie Steve Ives helfen geschrieben Sie vier Dinge

  1. machen irgendeine Form von integer tun wollen, dass, wenn die roten Punkte

    berührt hinzugefügt wird
  2. wenn die ganze Zahl> 0 ist, dann ist es nicht ein perfekter Wurf

  3. wenn die ganze Zahl = 0 sein ein perfekter Wurf

  4. Wenn die Punktzahl hinzugefügt wird, setzen Sie die ganze Zahl zurück und machen Sie alles wieder.

2
  1. ein Flag gesetzt, wenn die Kugel einer der roten Loten berührt.
  2. Platzieren Sie einen Knoten in der Mitte des Netzes, der so eingestellt ist, dass er benachrichtigt wird, wenn den Ball berührt.
  3. Wenn der 'Netzknoten' einen Kontakt auslöst und die 'Rote-Ecke'-Flagge nicht gesetzt ist, dann haben Sie einen perfekten Wurf.
  4. Setzen Sie das Flag "Rote Ecke" zurück.
+0

Wie setze ich eine Flagge zu den Ecken? Können Sie auf die Funktionen hinweisen, die ich verwenden muss? –

Verwandte Themen