Ich folge dem Sprite Kit Guide, und im Szeneneditor werde ich aufgefordert, die Kategorie Maske auf 32 und die Kollisionsmaske auf 11 zu setzen. Wie hängen diese Zahlen zusammen?Was sind Sprite Kits "Category Mask" und "Collision Mask"?
Antwort
Die Kategorie-Bitmaske teilt Sprite-Kit mit, um was für ein Objekt es sich handelt. Die Kollisions-Bitmaske teilt Sprite Kit mit, mit welchen Objekten dieses Objekt kollidiert (d. H. Trifft und springt ab). Die Bitmaske "ContactTest" teilt Sprite-Kit mit, mit welchen Kontakten Sie benachrichtigt werden möchten, d. H. Wenn dieses Objekt ein anderes Objekt berührt.
Kollisionen werden automatisch von der Sprite-Kit Game Engine behandelt; Kontakte werden von Ihrem Code bearbeitet - wenn ein Kontakt passiert, an dem Sie interessiert sind, wird Ihr Code (didBeginContact'
für Swift 2, 'didBegin(contact:)
für Swift 3) aufgerufen.
Sie müssen sich diese im Binärformat vorstellen und zur Vereinfachung beginnen wir mit einfachen Kategoriebitmasken, wobei jedes Objekt in Ihrer Szene nur einer Kategorie angehört.
z. In deiner Szene hast du einen Spieler, eine Spieler-Rakete, einen Feind und den Bildschirmrand. Wir nehmen an, dass die Bitmasken 8-Bit statt 32-Bit sind. Denken Sie an jede Nummer als ein Bereich von 8 Ziffern (8 Bit), von denen jeder eine 0 oder 1
Die Objekte in der Szene eindeutigen Kategorien haben haben, so dass wir sie wie folgt vergeben:
player.categoryBitMask = 00000001 (1 in decimal)
playerMissile.categoryBitMask = 00000010 (2 in decimal)
enemy.categoryBitMask = 00000100 (4 in decimal)
screenEdge.categoryBitMask = 00001000 (8 in decimal)
Wenn Sie Zahlen verwenden, die im Dezimalsystem eine andere Potenz als 2 haben (1, 2, 4, 8, 16, 32, 65, 128 usw.), wird in der Kategorie mehr als 1 Bit gesetzt Bitmaske, die die Dinge verkompliziert (es bedeutet, dass dieses Objekt zu mehreren Kategorien gehört) und Ihr Code muss komplizierter werden.
Jetzt überlegen, was abprallt (die Kollisionen). Nehmen wir an, alles springt von allem anderen ab, außer dass die Rakete durch den Bildschirmrand geht.
der Kollision Bitmasken für jedes Objekt der Bits besteht, die die Objekte darstellen, dass dieses Objekt mit dh kollidiert.
player.collsionBitMask = 00001111 (15 in decimal) (the bits for all other objects are set)
playerMissile.collisionBitMask = 00000111 (7) (all object EXCEPT screenEdge)
enemy.collisonBitMask = 00001111 (15) (everything)
screenEdge.collisonBitMask = 00000000 (0) (collides with nothing)
Jetzt denken wir über die Wechselwirkungen Objekt wir interessiert sind Wir wollen wissen, wann :
- Spieler und Feind Berührung
- Feind und Spieler berühren oder den Feind und den Raketen Berührung des Spielers.
Diese dargestellt wird durch:
player.contactTestBitMask = 00000100 (4) (the enemy's categoryBitMask)
enemy.contractTestBitMask = 00000011 (3) (the player's categoryBitMask combined with the missile's categoryBitMask))
Beachten Sie, wenn Sie wissen wollen, wenn A und B berühren, es ist eine nur zu haben, reicht die contactTestBitMask (CTBM) B categoryBitMask aufzunehmen; Sie müssen B's CTBM auch nicht auf A's Kategorie setzen. Wenn Sie jedoch möchten, dass sie sich gegenseitig abprallen, muss die collisionBitMask jedes Objekts die Kategorie bitMask des anderen enthalten. Wenn A's collisonbitMask die B-Kategorie enthält, aber nicht umgekehrt, wenn A kollidiert, wird A abprallen, aber B wird nicht beeinflusst.
Für Ihr spezifisches Beispiel, (Kategorie Maske bis 32 und Kollisionsmaske bis 11), ist die KategorieBitMask 32, die 00100000
ist (mit nur 8 Bit kleben).Die collisionBitMask ist 11, was 8 + 4 + 1 ist, also binär "00001101", was bedeutet, dass es mit Objekten mit einer categoryBitMask von 8, 4 oder 1 kollidiert, also nehme ich an, dass es Objekte in dieser Szene mit diesen categoryBitMasks gibt.
Standardmäßig springt alles von allem anderen ab, d. H. Die collisionBitMask ist alles "1", d. H. B'111111 .. 'und nichts meldet Kontakte mit irgendetwas anderem, d. H. ContactTestBitMask ist alles' Nullen.
Auch - all dies gilt für physicsBodies, nicht Knoten.
- 1. Cocos2d iPhone - Sprite cliping/mask/frame
- 2. Mask div mit CSS
- 3. Mask Minimalwerten in Matrixzeilen
- 4. Obfuscate/Mask/Scramble persönliche Informationen
- 5. Mask Zeichenfolge in ViewModel C#
- 6. jQuery Tools Overlay Mask Problem
- 7. Jquery Mask Nummer mit Komma und Dezimal
- 8. iPhone WiFi Subnet Mask und Router Adresse
- 9. Warum erstellt man ein maskiertes numpy array so langsam mit mask = None oder mask = 0
- 10. numpy masked_array mask ändert den Typ
- 11. Kontakt Test Bit Mask funktioniert nicht
- 12. Subnet Mask/23 bis zweiten octect 255.255.254.0
- 13. Angular Input Mask nur Zahlen zu deaktivieren
- 14. CALayer Cricle Mask Animation falsches Verhalten + swift
- 15. Mask Größe UIImageView beliebig veränderbare UIImage
- 16. Zeitvalidierung 24h-Format in jQuery Plugin Mask
- 17. Redirect & mask URL zu Azure Subdomain
- 18. berechnen Broadcast-Adresse von IP-und Subnet-Mask
- 19. Wie sollte cv :: mask für opencv minMaxLoc aussehen?
- 20. Warum fehlt die Rendering-Definition meines Mask-Content-Elements?
- 21. jquery mask eingabe plugin nur setzen tageswert des datums
- 22. Delphi Set Edit Mask ohne feste Länge von Zeichen
- 23. wie create mask in in field eingang mit angular 2?
- 24. Pygame Collision mit wechselnden Sprites
- 25. Multiple Collision und Score halten
- 26. Wie setze ich den IP-Bereich von jquery mask auf 255.255.255.255?
- 27. Wie ändere ich das Datumsformat in `Jquery mask plugin` von TT/MM/JJJJ nach MM/JJ?
- 28. MSBuild Starter Kits
- 29. Was sind Schwächen der XOR-Verknüpfung mit Secure Bytestrom
- 30. Collision Issues
Ich drucke das und ziehe es aus einem Kleiderbügel, der es vor mir hält, während ich herum laufe. Esel, die Karotte suchen. – Confused
Ich plane, einen Dokumentationsbeitrag zu diesem Thema zu machen und dann einen weiteren, um mehrere Kategorien für ein Objekt zu verwenden und wie man einzelne KontaktTest- und Kollisions-Bits abschaltet und anschaltet (zB hat der Spieler die goldene Münze gesammelt, also kontaktiert keine blauen Monster für 10 Sekunden). –
Es ist schade, dass es keine bessere Plattform für diese Art von Einsicht und Weisheit gibt, und dass es SO gelungen ist, die SO.docs auf jede mögliche Art und Weise zu verpfuschen, und andere Möglichkeiten, die ich nicht wirklich für möglich hielt. – Confused