Mein Spiel ist ein einfaches 2D-Spiel, aber dies gilt wahrscheinlich für viele Arten von Szenarien.
Angenommen, mein Spieler hat ein Schwert oder eine Waffe, die auf ein Projektil schießt, das mehrere Feinde durchdringen und treffen kann.
Während das Schwert schwingt, gibt es eine Zeitspanne, in der ich nach dem Schwert suche, das in jedem Bild Kontakt mit einem Feind aufnimmt. Aber sobald ein Feind von diesem Schwert getroffen wird, möchte ich nicht, dass er immer wieder getroffen wird, während das Schwert durchkommt. (Ich möchte, dass das Schwert weiterhin prüft, ob es andere Feinde trifft.)
Ich habe mir ein paar verschiedene Ansätze überlegt (siehe unten), aber sie scheinen mir nicht gut zu sein. Ich suche nach einem Weg, der keine Querverweise erzwingt (ich möchte nicht, dass der Feind eine Nachricht an das Schwert / Projektil zurücksenden muss). Und ich möchte vermeiden, bei jedem Angriff mehrere Array-Listen zu generieren / zurückzusetzen.
- Jedes Mal, wenn das Schwert schwingt, generiert es eine eindeutige ID (möglicherweise durch Inkrementieren einer globalen statischen Länge). Jeder Feind führt eine Liste mit IDs von Schlägen oder Projektilen, die ihn bereits getroffen haben, damit der Feind weiß, dass er nicht mehrmals von etwas verletzt wird. Nachteil ist, dass jeder Feind eine große Liste haben kann, mit der er vergleichen kann. Projektile und Schwertkämpfe müssten also ihr Lebensende an alle Feinde senden und eine Suche und Entfernung auf der Array-Liste jedes Feindes veranlassen. Scheint irgendwie langsam.
- Jeder Schwertschlag oder jedes Projektil führt eine eigene Liste von Feinden, die es bereits getroffen hat, damit es keinen Schaden anrichtet. Nachteile: Jedes Mal, wenn ein Schwert geschwungen oder ein Projektil abgefeuert wird, muss eine neue Liste erstellt werden (wahrscheinlich aus einem Pool ziehen und eine löschen). Dies beeinträchtigt auch die Modularität, da das Schwert nun eine Nachricht an den Feind senden muss und der Feind eine Nachricht an das Schwert zurücksenden muss. Mir scheint, dass solche Einbahnstraßen eine großartige Möglichkeit sind, sehr schwer zu findende Fehler zu verursachen.